mysql备份与恢复(mysqldump)

mysqldump:用来温备,所以我们得为所有库加读锁,并且滚动一下二进制日志,并记录当前二进制文件位置
备注:
温备是可读但不可写状态下进行的备份

步骤:
1、全备份
mysqldump -uroot -p –all-databases –lock-all-tables –routines –triggers –master-data=2 –flush-logs >/opt/date +%F-full.sql
备注:
–all-databases 备份所有库
–lock-all-tables 为所有表加读锁
–routines 存储过程与函数
–triggers 触发器
–master-data=2 在备份文件中记录当前二进制日志的位置,并且为注释的,1是不注释掉在主从复制中才有意义
–flush-logs 日志滚动一次

2、在mysql命令行查看当前的二进制日志

upload successful

3、备份二进制日志
cp /mybinlog/mysql-bin.000001 /opt/000001.sql

4、模拟一种场景,往linux表中新添加数据,然后不小心将这个表删了,我们要恢复到删除之前的状态,并且新加的数据还存在

upload successful

5、先恢复完整备份,恢复过程不要记录日志
编辑mysql配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

upload successful
在server-id和log_bin前面注释掉,然后重启mysql:
/etc/init.d/mysql restart

6、先执行全恢复
mysql -uroot -proot </opt/2019-03-12-full.sql

7、查看删除表时的记录位置
mysqlbinlog /var/log/mysql/mysql-bin.000002 |grep -C 20 DROP

upload successful

8、由上图可知删除是在25751时做的,将二进制文件中完整备份到删除表之前的记录导出
mysqlbinlog –stop-position=25751 /var/log/mysql/mysql-bin.000002 > /opt/000002.sql
备注:
–start-position 指定从哪开始导出二进制日志
–stop-position 指定到哪结束
–start-datetime 从哪个时间开始格式如”2005-12-25 11:25:56”
–stop-datetime 到哪个时间结束

9、将这段二进制记录应用到mysql的库中
mysql -uroot -proot </opt/000002.sql

10、进入数据库验证数据是否恢复

upload successful

11、重新打开二进制日志(参考第5个步骤)

总结:
基于mysqldump通常我们就是完整备份+二进制日志来进行恢复的。