mysql誤刪除資料恢復處理
後臺操作許可權較高人員執行錯誤的刪除語句:mysql> delete from order where order_id=1;
2.事故影響
使用者看不到這個定單,且這個定單是活躍的定單
3.是故時間
4.恢復處理流程
保留現場。
mysql> delete from order where order_id=4;
Query OK, 1 row affected (0.00 sec)
記錄誤操作語句。
delete from order where order_id=1;
評估受影響資料庫,表,和記錄數。
weshop_pure,order,1行記錄被刪除
拷貝最近備份檔案和從備份時間到當前的binlog日誌檔案到測試機
2016-02-29.3:18:48.db3.weshop_pure.sql.gz
mysql-bin.000039:包含從2016-02-29.3:18:48到當前的二進位制日誌
檢視二進位制中誤操作語句執行的位置點
mysqlbinlog ./mysql-bin.000039 >./mysqlbinlog.tmp
view ./mysqlbinlog.tmp
/*!*/;
# at 21729
#160229 11:23:03 server id 1 end_log_pos 21860 CRC32 0xab8e98fc Query thread_id=29217 exec_time=0 error_code=0
SET TIMESTAMP=1456716183/*!*/;
delete from order where order_id=4
/*!*/;
解壓資料備份檔案
gunzip 2016-02-29.3:18:48.db3.weshop_pure.sql.gz
在測試庫中執行資料備份檔案,恢復資料庫到初始時間點
mysql -udba -p -h127.0.0.1 < ./2016-02-29.11:18:48.db3.weshop_pure.sql
執行binlog日誌恢復到誤操作之前
mysqlbinlog --stop_position=21729 ./mysql-bin.000039 |mysql -udba -p123456 -h127.0.0.1
檢視資料是否恢復
mysql> SELECT * FROM `order`;
+----------+------------------+------------------+----------+--------------+----------+------------+--------------+------------+--------------+--------------+---------------+--------------+--------------+------------+-----------+---------------+--------------+------------------+-------------+--------------+------------+--------------+---------------+------------+------------+---------------+
| order_id | order_sn | pay_sn | store_id | store_name | buyer_id | buyer_name | buyer_email | add_time | payment_code | payment_time | finnshed_time | goods_amount | order_amount | rcb_amount | pd_amount | rebate_amount | shipping_fee | evaluation_state | order_state | refund_state | lock_state | delete_state | refund_amount | delay_time | order_from | shipping_code |
+----------+------------------+------------------+----------+--------------+----------+------------+--------------+------------+--------------+--------------+---------------+--------------+--------------+------------+-----------+---------------+--------------+------------------+-------------+--------------+------------+--------------+---------------+------------+------------+---------------+
| 2 | 8000000000050501 | 6005100574235001 | 1 | **聯盟 | 363 | crj |******3.com | 1456713480 | predeposit | 1456713480 | 1456715975 | 1000.00 | 1000.00 | 1000.00 | 0.00 | 0.00 | 0.00 | 0 | 40 | 0 | 0 | 0 | 0.00 | 1456713523 | 1 | NULL |
| 3 | 8000000000050601 | 5105100600824001 | 1 | **聯盟 | 363 | crj | ******3.com | 1456716008 | offline | 0 | 0 | 1000.00 | 1000.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0 | 1 | |
| 4 | 8000000000050701 | 9205100601392001 | 1 | **聯盟 | 363 | crj | ******3.com | 1456716107 | predeposit | 1456716107 | 0 | 1000.00 | 1000.00 | 1000.00 | 0.00 | 0.00 | 0.00 | 0 | 30 | 0 | 0 | 0 | 0.00 | 1456716134 | 1 | NULL |
+----------+------------------+------------------+----------+--------------+----------+------------+--------------+------------+--------------+--------------+---------------+--------------+--------------+------------+-----------+---------------+--------------+------------------+-------------+--------------+------------+--------------+---------------+------------+------------+---------------+
3 rows in set (0.00 sec)
匯出誤刪資料
mysqldump -udba -p -h127.0.0.1 weshop_pure --tables order --extended-insert=false --complete-insert --where='order_id=4'
......
LOCK TABLES `order` WRITE;
/*!40000 ALTER TABLE `order` DISABLE KEYS */;
INSERT INTO `order` (`order_id`, `order_sn`, `pay_sn`, `store_id`, `store_name`, `buyer_id`, `buyer_name`, `buyer_email`, `add_time`, `payment_code`, `payment_time`, `finnshed_time`, `goods_amount`, `order_amount`, `rcb_amount`, `pd_amount`, `rebate_amount`, `shipping_fee`, `evaluation_state`, `order_state`, `refund_state`, `lock_state`, `delete_state`, `refund_amount`, `delay_time`, `order_from`, `shipping_code`) VALUES (4,8000000000050701,9205100601392001,1,'**聯盟',363,'crj','
/*!40000 ALTER TABLE `order` ENABLE KEYS */;
UNLOCK TABLES;
......
拷貝insert語句到主庫上執行
檢查是否還原資料
5.備註
本次案例展示了delete誤刪除生產資料,利用dump備份和binlog日誌恢復資料,其實所有的誤操作都可以通過此方式恢復
應該嚴格控制資料庫許可權,最大限度降低誤操作概率
養成好習慣,危險操作(delete,update,DDL)之前一定要先備份資料