事情是這樣的:由於個人粗心,在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表的資料數量有沒有一樣,然後再叫部門同事驗證一下資料正確性。
到此,資料成功恢複還原。一次難忘的經曆啊,也同時告誡自己,細心細心再細心!!