通过Mysql-bin日志恢复还原数据

php中文网
发布: 2016-06-07 17:22:23
原创
1270人浏览过

提取出来后,里面就是所有对terminfo的sql语句了,把这些数据导入到测试库terminfo0730表中

事情是这样的:由于个人粗心,在7月30号那天协助其它部门批量更新一些数据,谁知道全局更新了,而这个问题竟然在9月26号才发现告知我。他们要求把更新有误的数据恢复到7月30号之前状态,并且7月30号到9月26号这段时间所做的增删改的操作也要更新进去。由于之前没啥经验,心里也没底,但是没办法,自己做错事自己承担。

做法思路:把备份的数据导到测试库里面去,然后把7月30号到9月26号之间的binlog日志提取出对这个表进行操作的sql语句,然后再导进去。

苦逼的还原过程开始了.........

1.幸好本人养成了个好习惯,无论改动的大小我都会先备份一份数据

-rw-r--r-- 1 root root 2473664 07-30 09:38 terminfo-bak0730.sql

找到了,果然是7月30号早上09点38分左右备份的,幸好有备份啊,要不然就悲催了.......先把备份的导到测试数据库上,表名改为terminfo0730,然后再把当前生产的数据导到,表名改为terminfo0926,这样的做法是在还原数据后匹配一下数据有没有对得上。






+----------------+

2.最重要的一步来了,,就是提取binlog日志。因为7月30号备份的,所以要找7月30号之后到9月26号的binlog。





利用mysqlbinlog命令先进行第一轮的sql语句提取

#mysqlbinlog --no-defaults --database=ecard --start-datetime='2012-07-30 09:38:00' mysql-bin.000086 > log86.txt  # 这里要设置起始时间
#mysqlbinlog --no-defaults --database=ecard  mysql-bin.000087 > log87.txt
#mysqlbinlog --no-defaults --database=ecard  mysql-bin.000088 > log88.txt
#mysqlbinlog --no-defaults --database=ecard  mysql-bin.000089 > log89.txt
#mysqlbinlog --no-defaults --database=ecard  mysql-bin.000090 > log90.txt

#ls -l




提取出来后是全部的sql语句,而我需要的是只对terminfo操作的sql语句,所以要进行第二轮提取

#grep terminfo log86.txt > log86-terminfo.txt #依次grep出来





提取出来后,里面就是所有对terminfo的sql语句了,把这些数据导入到测试库terminfo0730表中

mysql > source log86-terminfo.txt; #依次source进去,务必要注意顺序问题!!!

导进去之后再比较一下terminfo0730和terminfo0926表的数据数量有没有一样,然后再叫部门同事验证一下数据正确性。

到此,数据成功恢复还原。一次难忘的经历啊,也同时告诫自己,细心细心再细心!!

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号