通過Mysql-bin日誌恢複還原資料

來源:互聯網
上載者:User

事情是這樣的:由於個人粗心,在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表的資料數量有沒有一樣,然後再叫部門同事驗證一下資料正確性。

到此,資料成功恢複還原。一次難忘的經曆啊,也同時告誡自己,細心細心再細心!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.