使用mysqlbinlog 恢復數據實驗

要使用mysqlbinlog 恢復數據首先必須啓用過binglog

/etc/my.cnf

log-bin=mysql-bin

當然不是等到數據損壞的時候再啓用binglog,那時候已經爲時已晚!

 

mysqlbinlog恢復命令:

 

/mysql/bin/mysqlbinlog --database=bbs --start-date="2013-01-22 05:00:00"  --stop-date="2013-01-22 09:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f

註釋:
--database=bbs                                             // 需要恢復的數據庫      
--start-date="2013-01-22 05:00:00"  // 恢復數據起始時間
--stop-date="2013-01-22 09:00:00"  // 恢復數據截至時間
/mysql/data/mysql-bin.000001       // 引用的日誌文件,多個日誌就多增加幾條
/mysql/bin/mysql -u root -p123456  // 登錄Mysql帳號密碼
-f                                 // 忽略錯誤,否則遇到相同條目恢復就會終止
 
 
需要注意的問題:
 
mysqlbinlog命令只能恢復binglog日誌裏有的數據
一般我們都使用expire-logs-days來限制日誌保存的天數,以防止日誌文件不斷增大撐爆硬盤。
假設 expire-logs-days  = 7
那麼7天之前的數據如果被誤刪除將無法通過此命令恢復,比如discuz論壇,你要是誤刪除了某個版塊,而這個版塊創建已經有半年,顯然版塊以及版塊內的所有帖子,無法使用近期的binglog日誌恢復。
遇到這種情況,要想恢復數據,必須配合每天定時備份的數據來進行
 
假設數據是每天早上5點定時打包備份,早上9點誤刪了某個版塊
 
首先恢復打包備份的數據
 
service mysql stop
cd /mysql/data
tar zxvf /mysql/dbbackup/bbs20130122.tar.gz
service mysql start
/mysql/bin/mysqlbinlog --database=bbs --start-date="2013-01-22 5:00:00"  --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f
 
 
恢復的時候最好是斷開網站與數據庫的連接
假如9點以後有產生的數據,再取個9點後的時間段恢復下應該沒問題
 
用一個從數據庫做上述恢復測試,使用測試論壇連接該數據庫,去測試論壇後臺刪了個版塊,沒料到把正在使用的該版塊附件都給刪除了,明明去後臺修改了遠程附件連接地址,幸虧,附件我也有備份,所以說,數據備份多麼重要!
 
 
假設幾種需要恢復數據的狀況出現:
 
1.誤刪數據,這些數據在日誌能夠恢復的期限內創建,直接使用命令就行了
 
2.誤刪的數據不包含在日誌內,使用日誌配合定期打包的數據按上述方法恢復
 
3.系統因種種原因被破壞,比如******、硬盤損壞等等情況,日誌也沒了,以防萬一,我們只要事先做好主從同步,只需要把數據庫切換到從庫上就解決了
 
4.從庫也同時被***搗毀了,我們還有定時備份到網盤的數據,損失幾個小時的數據吧
 
5.網盤也被******癱瘓了,不怕,數據已經由網盤實時同步到本地硬盤,揣上移動硬盤奔機房去吧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章