作者:張正 | 日期:2014-09-26 | QQ:176036317
開發回報:2014-09-25 21:53:57 某文章表 content 欄位被惡意篡改,全表內容統一改為某篇游記內容。經日誌確認篡改時間點精確到秒。
# 備份腳本 cron (已被註釋) # 0 3 * * * /data/opdir/mysqlbak/backup_mysqldump.sh 6084 # 實際備份目錄列表 drwxr-xr-x 2 root root 4096 Sep 23 18:33 20140923 <-- 最新備份 -rw-r--r-- 1 root root 5475 Sep 23 18:33 mysql-bakup.log
備份日誌關鍵資訊:
2014-09-23 18:19:12 begin backup ... <-- STOP SLAVE 時間點 2014-09-23 18:33:43 end backup ...
關鍵判斷: 從庫備份腳本先 STOP SLAVE 再備份,且監控顯示該時刻主從延遲為 0,故備份反映主庫 2014-09-23 18:19:12 的狀態。以此為 --start-datetime。
篡改時間 2014-09-25 21:53:57,故 --stop-datetime 設為 2014-09-25 21:53:56。
scp backup_host:/data/mysqlbak/20140923/20140923.db_name.gz recovery_host:/data/opdir/20140926/
gunzip 20140923.db_name.gz
mysql -uroot -pxxx -S /tmp/mysql.sock < 20140923.db_name
# 主庫 Binlog 列表 mysql-bin.000472 (Sep 24) mysql-bin.000473 (Sep 25) mysql-bin.000474 (Sep 26) # 僅需這三個檔案 scp mysql-bin.00047[2-4] recovery_host:/data/opdir/20140926/
mysqlbinlog --database=db_name --start-datetime='2014-09-23 18:19:12' --stop-datetime='2014-09-25 21:53:56' mysql-bin.000472 > 472.sql mysqlbinlog --database=db_name --start-datetime='2014-09-23 18:19:12' --stop-datetime='2014-09-25 21:53:56' mysql-bin.000473 > 473.sql mysqlbinlog --database=db_name --start-datetime='2014-09-23 18:19:12' --stop-datetime='2014-09-25 21:53:56' mysql-bin.000474 > 474.sql
mysql -uroot -pxxx -S /tmp/mysql.sock db_name < 472.sql mysql -uroot -pxxx -S /tmp/mysql.sock db_name < 473.sql mysql -uroot -pxxx -S /tmp/mysql.sock db_name < 474.sql
SELECT MAX(createtime), MAX(updatetime) FROM table_name; -- 確認最新時間約為 20:27,早於篡改時間 21:53
經業務開發確認無誤後,進行線上切換。
mysqldump -uroot -pxxx -S /tmp/mysql.sock -q db_name table_name > table_name.sql gzip table_name.sql scp table_name.sql.gz master_host:/target/path/