mysql基于binlog日志恢复数据库

备注:公司新来了一个妹子,操作失误,执行了 rm -rf / ,完蛋,整个服务器全部GG,通过ext3grep等软件只能恢复到binlog日志。怎么办?数据库每天凌晨全量备份一次,前提是mysqldump执行的备份文件是在别的服务器上,否则只能将所有的binlog日志回放一遍,今天来介绍下如何通过binlog日志恢复mysql。

一、我们将最新的mysqldump文件恢复到新的数据量实例上,至于命令,我前面的文章有详细的解读。

二、找到今日凌晨到数据库删除时的binlog日志,通常情况下binlog日志是按照对应的时间节点进行的切割。

mysql 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
show binlog events in 'mysql-bin.000001' 执行之后的效果

五、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的版本,你会发现很多意想不到的事情等着你。)

推荐阅读更多精彩内容

  • 非跟团。 我是加拿大的留学生,这篇我只想说些我认为必去的景点。 著名的尼亚加拉大瀑布,对岸是美国,但是在加拿大这边...
    秋水凌天阅读 198评论 0 0
  • 正念提供一条简单有力的路径,让我们从问题中解放,联系上自己的智慧和生命力,重新掌握生命的方向和质量,包括家庭中的人...
    秋山2008阅读 1,526评论 0 2
  • 每日精选笑话:坚定地写上了答案 考试,同桌轻声问我:“第十题答案什么?” 我:“不知道,反正AB肯定错。” 同桌:...
    火锅家族阅读 400评论 2 9
  • 你说天空中的空白格, 是我为你谱的歌, 你说,已碎的玻璃,绝不再复合。 你说,一切, 我也说,一切, 到最后都会好...
    Wu爱丽丝阅读 84评论 0 1
  • 题记:其实不用担心,你们中的很多人,一辈子都不会遇见你梦想的真爱。只会因为害怕孤独地死去,而选择随便找个人,互相饲...
    乔伊Joyin阅读 192评论 0 1