4.2.5 案例:通過mysqldump全備+binlog實現PIT資料恢復
阿新 • • 發佈:2020-12-24
環境背景: 小型的業務資料庫,50G,每天23:00全備,定期binlog異地備份。
故障場景: 週三下午2點,開發Navicat連線資料庫例項錯誤,導致生產資料被誤刪除(DROP)
- 恢復思路:
1. 掛維護頁。
2. 檢查備份、日誌可用。
3. 如果只是部分損壞,建議找一個應急庫進行恢復
a. 全備恢復
b. 日誌擷取並恢復
4. 恢復後資料校驗 (業務測試部門驗證)
5. 立即備份(停機冷備)
6. 恢復架構系統
7. 撤維護頁,恢復業務
- 模擬故障:
1. 模擬測試資料 mysql> create database pit; mysql> use pit mysql> create table t1 (id int); mysql> insert into t1 values(1),(2),(3); mysql> commit; 2. 全備 [root@db01 tmp]# mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M >/tmp/full_2300.sql 3. 模擬週三白天的操作 mysql> use pit mysql> insert into t1 values(11),(22),(33); mysql> commit; 4. 模擬週三下午2:00,刪庫操作 mysql> drop database pit;
- 恢復過程
1. 恢復全備 source /tmp/full_2300.sql 2. 擷取二進位制日誌 起點: 21105555 [root@db01 tmp]# grep "\-- CHANGE MASTER TO" /tmp/full_2300.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=21105555; 終點:21105836 a. show master status ; b. mysql> pager grep -i "drop database pit" -B 10 | mysql-bin.000009 | 21105805 | Xid 51 | 21105836 | COMMIT /* xid=6232 */ | mysql-bin.000009 | 21105836 | Gtid 51 | 21105913 | SET @@SESSION.GTID_NEXT= '95972e36-43fe-11eb-a366-000c2905f029:70' | mysql-bin.000009 | 21105913 | Query 51 | 21106014 | drop database pit /* xid=6234 */ [root@db01 tmp]# mysqlbinlog --skip-gtids --start-position=21105555 --stop-position=21105836 /data/3306/binlog/mysql-bin.000009 >/tmp/bin.sql 3. 恢復日誌 mysql> set sql_log_bin=0; mysql> source /tmp/bin.sql mysql> set sql_log_bin=1;