请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

数据库恢复的时候报了一个的错误

linux系统 centos.我数据库使用的是mysql5.7

在使用 mysql -uroot -padmin goods </root/goods.sql后

然后执行

mysqlbinlog --start-position=154 --stop-position=700 --database=goods binlog000030 binlog000032 > /root/goods_diff.sql

其中start-position=154的值是全量备份goods.sql CHANGE MASTER这一行MASTER_LOG_POS。binlog.000030日志是CHANGE MASTER是MASTER_LOG_POS. stop-position=700.这个日志点是在binlog000032日志文件中INSERT语句前面找到的.

执行完这个语句后,神奇的现象出现了。WARNING:the option --database has been used, it may filter parts of transactions,but will include the GTIDs in any case,if you want to exclude or include transaction,you should use the options --exclude -gtids or  --include-gtids,repectively,instead.

这里只是一个warning,我也就不在乎。但是我执行了

mysql -uroot -padmin goods < /root/goods_diff.sql,此时并没有恢复到insert之前的状态。我才意识到问题的严重性。明天就要给甲方交付自动化恢复的shell脚本。老师知道这是什么原因造成的吗?

正在回答 回答被采纳积分+3

1回答

sqlercn 2017-11-25 10:58:12

mysql的binlog日志记录的是对数据库的修改,你先恢复goods.sql,然后再想恢复到导入之前的状态是不能单独依靠恢复binlog日志来完成的,利用binlog日志恢复数据,要先恢复一个全备,然后再恢复这个全备之后的binlog到指定的日志点。

0 回复 有任何疑惑可以回复我~
  • 老师,mysql -uroot -padmin goods </root/goods.sql这个就是恢复一个全备呀。binlog.000030就是通过more /root/goods.sql找到的CHANGE MASTER那一行的 MASTER_LOG_FILEDE 值。指定的日志点700就是在binlog.000032日志文件中找到的了。然后就是执行
    mysqlbinlog --start-position=154 --stop-position=700 --database=goods binlog.000030 binlog 000031 binlog.000032 > /root/goods_diff.sql导入差异文件。
    再进行 mysql -uroot -p goods </root/goods_diff.sql操作了。
    感觉思路没有错。就是没有结果。
    回复 有任何疑惑可以回复我~ 2017-11-25 11:20:41
  • sqlercn 回复 提问者 qq_金融超越战_03665934 #2
    goods.sql中记录的日志点是备份时的日志点,后面再做日志恢复的话,要恢复大于这个日志点的日志。
    回复 有任何疑惑可以回复我~ 2017-11-25 11:27:52
  • 提问者 qq_金融超越战_03665934 回复 sqlercn #3
    mysqlbinlog --start-position=154 --stop-position=700 --database=goods binlog.000030 binlog 000031 binlog.000032 日志起点(全量备份的那个日志点)binlog000030,日志终点binlog.000032,我这样恢复,不是你说的要恢复大于这个日志点的日志吗?因为binlog.000032日志是大于binlog.000030的呀
    回复 有任何疑惑可以回复我~ 2017-11-25 11:34:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信