事情是这样的:由于个人粗心,在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,这样的做法是在还原数据后匹配一下数据有没有对得上。mysql>use reed
Database changed
mysql> show tables;
+----------------+
|Tables_in_reed|
+----------------+
| terminfo0730 |
| terminfo0926 |
+----------------+2.最重要的一步来了,就是提取binlog日志。因为7月30号备份的,所以要找7月30号之后到9月26号的binlog。-rw-rw----1 mysql mysql 107374208408-0920:03 mysql-bin.000086
-rw-rw----1 mysql mysql 107374189408-2604:51 mysql-bin.000087
-rw-rw----1 mysql mysql 107374207809-1211:12 mysql-bin.000088
-rw-rw----1 mysql mysql 107663780509-2611:55 mysql-bin.000089
-rw-rw----1 mysql mysql 4533942009-2618:50 mysql-bin.000090利用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-rw-r--r-- 1 root root 1553740972 09-26 19:38 log86.txt
-rw-r--r--1 root root 153286277909-2619:52 log87.txt
-rw-r--r--1 root root 157780920009-2619:55 log88.txt
-rw-r--r--1 root root 158045208209-2619:57 log89.txt
-rw-r--r--1 root root 6494588409-2619:58 log90.txt提取出来后是全部的sql语句,而我需要的是只对terminfo操作的sql语句,所以要进行第二轮提取#grep terminfo log86.txt > log86-terminfo.txt #依次grep出来[root@localhost txt]# ll
总计264
-rw-r--r--1 root root 2020609-2619:50 log86-terminfo.txt
-rw-r--r--1 root root 7874009-2619:59 log87-terminfo.txt
-rw-r--r--1 root root 6542909-2619:59 log88-terminfo.txt
-rw-r--r--1 root root 6529409-2619:59 log89-terminfo.txt
-rw-r--r--1 root root 94109-2620:00 log90-terminfo.txt提取出来后,里面就是所有对terminfo的sql语句了,把这些数据导入到测试库terminfo0730表中mysql > source log86-terminfo.txt; #依次source进去,务必要注意顺序问题!!!导进去之后再比较一下terminfo0730和terminfo0926表的数据数量有没有一样,然后再叫部门同事验证一下数据正确性。到此,数据成功恢复还原。一次难忘的经历啊,也同时告诫自己,细心细心再细心!!Oracle 存储过程中查询序列值并用变量接收Oracle 11g sga_target 参数设置相关资讯 MySQL基础教程 binlog MySQL binlog MySQL数据库还原
- MySQL binlog中的事件类型 (08月19日)
- MySQL binlog 安全删除 (03月30日)
- 通过Linux命令过滤出binlog中完整 (01月30日)
| - MySQL数据丢失后利用binlog恢复有 (04月18日)
- MySQL在ROW模式下通过binlog提取 (01月30日)
- 关于使用MySQL binlog对数据进行恢 (01月24日)
|
本文评论 查看全部评论 (0)