由於意外。。阿里雲mysql中有一張表被全部刪除了,深吸三口氣候,開始解決。
首先用凌晨的自動備份的,進行全量恢復,然后找binlog日志(見下文),查找從全量備份到數據刪除之間的記錄
這導致了一個問題,為了恢復那一張表,其他的表的數據也回滾到了凌晨備份的事后。。。
由於當時比較緊張,而且時間有限,所以考慮不周,事后總結:
應該在數據庫實例中新建一個新的臨時庫,將備份恢復到臨時庫中,然后在臨時庫導出被誤刪的表的數據,然后再將數據導入到正式的數據庫中對應表中。
最后再從binlog日志文件中只尋找刪除的表,從凌晨到刪除這幾個小時之間的數據。
數據丟失對任意一個網站來說都是災難性的,在開發過程中,update和delete操作一定要跟上條件,而且條件中堅決杜絕出現類似where 1=1 恆等的情況,以免后面的and條件因為邏輯或者外星人入侵等問題沒有組裝上,從而導致悲劇產生。
mysql binlog3種格式,row,mixed,statement. 解析工作
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000144 |more
--base64-output=DECODE-ROWS: 會顯示出row模式帶來的sql變更。
-v :顯示statement模式帶來的sql語句
outous-MacBook-Pro:bin user$ ./mysqlbinlog --base64-output=DECODE-ROWS -v /Users/dir/mysql-bin.000186 > /Users/dir/log.txt outous-MacBook-Pro:bin user$ pwd /usr/local/mysql/bin
