mysql 日志还原数据库_通过Mysql-bin日志恢复还原数据
事情是這樣的:由于個人粗心,在7月30號那天協(xié)助其它部門批量更新一些數(shù)據(jù),誰知道全局更新了,而這個問題竟然在9月26號才發(fā)現(xiàn)告知我。他們要求把更新有誤的數(shù)據(jù)恢復(fù)到7月30號之前狀態(tài),并且7月30號到9月26號這段時間所做的增刪改的操作也要更新進去。由于之前沒啥經(jīng)驗,心里也沒底,但是沒辦法,自己做錯事自己承擔(dān)。
做法思路:把備份的數(shù)據(jù)導(dǎo)到測試庫里面去,然后把7月30號到9月26號之間的binlog日志提取出對這個表進行操作的sql語句,然后再導(dǎo)進去。
苦逼的還原過程開始了.........
1.幸好本人養(yǎng)成了個好習(xí)慣,無論改動的大小我都會先備份一份數(shù)據(jù)
-rw-r--r-- 1 root root 2473664 07-30 09:38 terminfo-bak0730.sql
找到了,果然是7月30號早上09點38分左右備份的,幸好有備份啊,要不然就悲催了.......先把備份的導(dǎo)到測試數(shù)據(jù)庫上,表名改為terminfo0730,然后再把當(dāng)前生產(chǎn)的數(shù)據(jù)導(dǎo)到,表名改為terminfo0926,這樣的做法是在還原數(shù)據(jù)后匹配一下數(shù)據(jù)有沒有對得上。
>usereed
Databasechanged
mysql>show tables;
+----------------+
|Tables_in_reed|
+----------------+
|terminfo0730|
|terminfo0926|
+----------------+
2.最重要的一步來了,就是提取binlog日志。因為7月30號備份的,所以要找7月30號之后到9月26號的binlog。
-rw-rw----1mysql mysql107374208408-0920:03mysql-bin.000086
-rw-rw----1mysql mysql107374189408-2604:51mysql-bin.000087
-rw-rw----1mysql mysql107374207809-1211:12mysql-bin.000088
-rw-rw----1mysql mysql107663780509-2611:55mysql-bin.000089
-rw-rw----1mysql mysql4533942009-2618:50mysql-bin.000090
利用mysqlbinlog命令先進行第一輪的sql語句提取
#mysqlbinlog --no-defaults --database=ecard --start-datetime='2012-07-30 09:38:00' mysql-bin.000086 > log86.txt? # 這里要設(shè)置起始時間
#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--1root? root153286277909-2619:52log87.txt
-rw-r--r--1root? root157780920009-2619:55log88.txt
-rw-r--r--1root? root158045208209-2619:57log89.txt
-rw-r--r--1root? root6494588409-2619:58log90.txt
提取出來后是全部的sql語句,而我需要的是只對terminfo操作的sql語句,所以要進行第二輪提取
#grep terminfo log86.txt > log86-terminfo.txt #依次grep出來
[root@localhost txt]# ll
總計264
-rw-r--r--1root root2020609-2619:50log86-terminfo.txt
-rw-r--r--1root root7874009-2619:59log87-terminfo.txt
-rw-r--r--1root root6542909-2619:59log88-terminfo.txt
-rw-r--r--1root root6529409-2619:59log89-terminfo.txt
-rw-r--r--1root root94109-2620:00log90-terminfo.txt
提取出來后,里面就是所有對terminfo的sql語句了,把這些數(shù)據(jù)導(dǎo)入到測試庫terminfo0730表中
mysql > source log86-terminfo.txt; #依次source進去,務(wù)必要注意順序問題!!!
導(dǎo)進去之后再比較一下terminfo0730和terminfo0926表的數(shù)據(jù)數(shù)量有沒有一樣,然后再叫部門同事驗證一下數(shù)據(jù)正確性。
到此,數(shù)據(jù)成功恢復(fù)還原。一次難忘的經(jīng)歷啊,也同時告誡自己,細心細心再細心!!
總結(jié)
以上是生活随笔為你收集整理的mysql 日志还原数据库_通过Mysql-bin日志恢复还原数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 创建外键索引吗_索引-MyS
- 下一篇: 坦克为什么用滑膛炮?