linux php mysql 备份_[Linux] PHP程序员玩转Linux系列-备份还原MySQL

前几天有个新闻,说是gitlab的工程师把数据文件给误删了,搞了个大事件,很多人都去围观了.备份工作应该在最开始的时候就要做,否则就会失去最佳时机,为了保证我的数据是安全的,因此我要搞备份了.备份分为逻辑备份和物理备份,逻辑备份是导sql,物理备份是基于文件的,这两种我都搞一下.

开启binlog

首先第一件事是打开binlog日志,编辑mysql配置文件开启一下,默认是关闭的.编辑 /etc/my.cnf, log-bin=mysqlbinlog =号后面的是binlog日志的名字,默认生成在数据目录里面,重启一下mysql服务,service mysqld restart

32c2f52ef81de2d4410b50976256156c.png

查看mysql的数据目录,/var/lib/mysql,mysqlbinlog.000001等文件就是binlog日志文件.

b7b4473fa8593733c9fa7d8fc5110759.png

添加一些测试数据

建数据库,建表和插入一些记录,用于测试,表的存储引擎选择innodb,因为这个引擎容易测出来问题

entmail charset( id auto_increment ,name () ) engine(,(,(,(,);

e272234c7ab0838ff1d562820beb08f7.png

小数据量使用mysqldump逻辑备份

第一想到的备份方式是使用mysqldump,导出sql语句,恢复的时候就再次导入sql语句.

针对我的数据库,用户名root 密码空,我放sql文件的位置是/home/shihan1/mysql/sqls/,备份所有数据库, 我的导出命令是下面这句

mysqldump uroot /home/shihan1/mysql/sqls/all.sql

此时,我误删了数据库entmail,drop database entmail

9a8bf1acc7740e8a6e09133437dbe0b4.png

不着急,马上进行恢复,执行以下导入命令,数据库立刻就回来了,注意一个是mysqldump命令,一个是mysql命令

mysql uroot homeshihan1mysqlsqls.sql

为啥不能用拷贝数据目录的方式备份

有的同学会使用直接拷贝数据目录的方式备份,我也测试了一下,实际证明这种方式是不正确的.我用tar命令把数据目录整个打包搬走,然后删除整个数据目录,再搬回来.

13f829fdb90e577af060d83845b9ed94.png

因为我把mysql的那几张用户表啥的都删了,mysql会进行重新初始化

2e5995950e99d7961a8ef42586776796.png

我把数据文件再搬回来,然后进mysql看看,结果是这样的,告诉我user表不存在了,这张表是innodb引擎的,所以不能使用这种方式,幸亏我有前面的逻辑备份,从新导一下,数据又回来了.

mysql -uroot < /home/shihan1/mysql/sqls/all.sql

94ab993b9f173f7e119a17ec4e5b6bc5.png

使用第三方软件percona-xtrabackup实现物理备份

可以实现物理备份的软件与很多,mysql也有企业版备份工具,但是貌似是收费的,percona-xtrabackup这个开源软件可以很好的实现全量备份和增量备份.

前往这个地址下载rpm包,里面可以选择版本,我最开始选的最新版2.4.6,结果报这个错误:Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0,or upgrade to InnoDB plugin.然后从新下了个2.0.0版是可以的.

https://www.percona.com/downloads/XtraBackup/

https:-i percona-xtrabackup-.--y -devel libaio libaio-devel -Time-HiRes -DBD-MySQL -MD5 rsync libev numactl

开始备份了

当前数据:

fcf0914e0924af5e9caa5d82a975254a.png

1. 我先把所有数据全量备份一次,后面那个目录是备份保存的目录,执行完成后出现innobackupex: completed OK!代表成功,生成的备份文件2017-02-24_17-47-55

innobackupex --user=root /home/shihan1/mysql/backups/

cb95b1cb3697b3054cb0c057a119533f.png

2. 添加几条新数据进去,现在的数据情况

insert into user values(,,);

2e3ae78018f266f3cf133bbcd615781d.png

3. 增量备份一次,就多了一个参数--incremental,增量备份生成的文件是 2017-02-24_17-51-32,数据的大小也是不一样的

innobackupex --user=root --incremental /home/shihan1/mysql/backups/

5e5b35398f99d49c75818bf4c3b4bbc1.png

3b54fc14cac3d97d41541bbc5f6d4591.png

4. 此时发生灾变,我把数据目录给删了!  rm -rf /var/lib/mysql/*,mysql已经连不上了

766e59ae0a516c02082bc80f44fa62cf.png

5. 抓紧恢复数据,准备全量备份文件,合并增量备份文件,执行恢复

--apply-log --redo-only /home/shihan1/mysql/backups/--24_17--/--apply-log --redo-only /home/shihan1/mysql/backups/--24_17--/ --incremental-/home/shihan1//backups/--24_17--/--copy-back /home/shihan1/mysql/backups/--24_17--

2eb18b2fa5f3bade3ec763dc12adb02e.png

6. 数据已经回来了,重新修改一下数据文件的属组和属主 chown mysql:mysql -R /var/lib/mysql/*,重启一下mysql,数据全部恢复

af4d8f7d32e29020c837198f82a1ab6c.png

c067ee6d481089a4ca22583260639ed0.png

下一篇定时执行备份脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值