备注:公司新来了一个妹子,操作失误,执行了 rm -rf / ,完蛋,整个服务器全部GG,通过ext3grep等软件只能恢复到binlog日志。怎么办?数据库每天凌晨全量备份一次,前提是mysqldump执行的备份文件是在别的服务器上,否则只能将所有的binlog日志回放一遍,今天来介绍下如何通过binlog日志恢复mysql。
一、我们将最新的mysqldump文件恢复到新的数据量实例上,至于命令,我前面的文章有详细的解读。
二、找到今日凌晨到数据库删除时的binlog日志,通常情况下binlog日志是按照对应的时间节点进行的切割。
三、假如需要将某一个binlog完全恢复,只需要执行以下命令:
mysqlbinlog mysql-bin.000010 | mysql -uroot -p
四、binlog文件处于凌晨备份的时间节点(这种情况下,复杂一些。)
方法1、根据起始和终止时间进行恢复
mysqlbinlog mysql-bin.000001 --start-datetime='2019-07-12 19:50:36' --stop-datetime='2019-07-13 19:23:40' | mysql -uroot -p
方法2、根据起始节点和终止节点进行恢复
#查看binlog日志的节点位置情况
show binlog events in 'mysql-bin.000001' \G;
#根据binlog起始和结束节点做恢复
mysqlbinlog mysql-bin.000001 --start-position=100 --stop-position=200 | mysql -uroot -p
五、linux不是太熟悉的同学看这里(前面文章有介绍过)
#将mysqlbinlog 转为可读、可执行的sql文件
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 > text.log
六、后记
1、mysqldump备份mysql时切记需要全路径,否则备份得到的文件是空的。
2、reset master
命令不要随便执行,它会将你的mysqlbinlog全部删除。
3、mysql 5.6以上版本备份时会有个gtid,备份时最好关闭,否则恢复时会有个error,百度告诉你,你需要reset master,然后你的binlog全都丢失,切记切记。
#关闭gtid的mysqldump备份命令
/usr/bin/mysqldump --set-gtid-purged=off --opt -h$DB_HOST -u$DB_ROOT -p$DB_PASS $DB_PROJECT > /root/mysqlbak/project/${DB_PROJECT}_${data}.sql
4、记得实战演练(不要随便去升级mysql的版本,你会发现很多意想不到的事情等着你。)