1. 程式人生 > >mysql誤刪除資料恢復處理

mysql誤刪除資料恢復處理

1.事故
後臺操作許可權較高人員執行錯誤的刪除語句: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','
[email protected]
',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);
/*!40000 ALTER TABLE `order` ENABLE KEYS */;
UNLOCK TABLES;
......
拷貝insert語句到主庫上執行

檢查是否還原資料


5.備註
本次案例展示了delete誤刪除生產資料,利用dump備份和binlog日誌恢復資料,其實所有的誤操作都可以通過此方式恢復
應該嚴格控制資料庫許可權,最大限度降低誤操作概率
養成好習慣,危險操作(delete,update,DDL)之前一定要先備份資料

相關推薦

mysql刪除資料恢復處理

1.事故 後臺操作許可權較高人員執行錯誤的刪除語句:mysql> delete from order where order_id=1; 2.事故影響 使用者看不到這個定單,且這個定單是活躍的定單 3.是故時間 4.恢復處理流程 保留現場。 mysql> del

MySQL:生產刪除資料恢復方法

因為生產上誤執行語句,需要找回原資料delete from `xxx` where a = 1; 步驟 1、解析主的binlog找到執行刪除語句時對應的pos點,如下: # at 27206534

mysql資料刪除恢復,drop表或庫的恢復

昨天,我不小心,在沒有完全溝通的情況下,直接刪除了一個庫,導致同事辛苦了一週的資料丟失,由於是整個庫都刪掉了,所以並不是單純的去找誤操作的日誌,然後根據操作sql,去回滾資料。好歹會後恢復了。 下面就根據我恢復的經歷,講一下mysql資料庫資料恢復的方法: 1. 首先,我

mysql利用mysqlbinlog命令恢復刪除資料

實驗環境: MYSQL 5.7.22  開啟二進志日誌 日誌格式MIXED 實驗過程: 1、執行:FLUSH LOGS; master-bin.000014 檔案就是新生成的檔案 重新整理日誌是為了實驗內容更直觀,更容易觀察到整個實驗過程的內容。 我看

SQL Server 2008 資料庫刪除資料恢復

關鍵字:SQL Server 2008, recover deleted records 背景:誤刪除資料。 SQL Server中誤刪除資料的恢復本來不是件難事,從事務日誌恢復即可。但是,這個恢復需要有兩個前提條件: 1. 至少有一個誤刪除之前的資料庫完全備份。 2. 資料庫的恢

使用binlog日誌恢復MySQL資料庫刪除資料的方法

binlog日誌簡介: binlog 就是binary log,二進位制日誌檔案,這個檔案記錄了MySQL所有的DDL和DML(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間。 binlog日誌包括兩類檔案: 1)二進位制日誌索引檔案(檔名字尾為.index):用於

MySQL使用binlog2sql閃回刪除資料

查詢資料庫相關配置引數 root [test]> show global variables like ‘binlog%format%’; +—————+——-+ | Variable_name | Value | +—————+——-+ | b

mysql undo 和redo 被刪除恢復操作(一致性)

今天在群裡看到有人說不熟悉innodb把ibdata(資料檔案)和ib_logfile(事務日誌)檔案誤刪除了。不知道怎麼解決。當時我也不知道怎麼辦。後來查閱相關資料。終找到解決方法。其實恢復也挺簡單的。我們不知道的時候就覺得難了。誰說不是這樣呢? 下面我們就來模擬生產環境下,人為刪除資料檔案和重做日誌檔案

oracle刪除資料恢復方法

學習資料庫時,我們只是以學習的態度,考慮如何使用資料庫命令語句,並未想過工作中,如果誤操作一下,都可能導致無可挽回的損失。當我在工作中真正遇到這些問題時,我開始尋找答案。 今天主要以oracle資料庫為例,介紹關於表中資料刪除的解決辦法。(不考慮全庫備份和利用歸檔日誌

mysql刪除恢復

+-------------------+----------+--------------+------------------+ | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+

SQL Server 2008 刪除資料恢復

    前言     在平時大家用到SQL Server的時候很多,也經常會對其進行各種操作,簡單的資料查詢或新增還沒什麼問題,頂多就是新增錯誤直接刪除就可以了,但如果你操作的是重要的資料庫,而且庫

mysql資料快速恢復

相信後端研發的同學在開發過程經常會遇到產品臨時修改線上資料的需求,如果手法很穩那麼很慶幸可以很快完成任務,很不幸某一天突然手一抖把表裡的資料修改錯誤或者誤刪了,這個時候你會發現各種問題反饋接踵而來。如果身邊有BDA或者有這方面經驗的同事那麼可以很快解決這個問題,如果沒有那

Mysql資料庫修復,Ibdata1檔案刪除資料恢復成功

Mysql資料庫Ibdata1檔案刪除資料恢復成功 【客戶描述】 一RAID1網站伺服器,存放Mysql資料庫目錄被惡意刪除,計算機重啟後,Mysql服務啟動後自動建立了Ibdata及系統庫,後又被刪除 【恢復過程】 因資料庫有以前的老備份,檢視備份發現數據庫

oracle刪除資料之後的恢復方法

  今天要刪除表中的資料,不小心刪錯,而且提交了事務,這些資料要從頭再來,估計今天就全耽誤在這事上面了,只能在網上找資料,看了很多資料,現在自己也歸納一下   刪除表中的資料由三種方法:   delete刪除一條資料  drop和truncate刪除表格中資料   1.d

Oracle資料庫資料檔案rm -rf刪除恢復

Oracle資料庫中表空間的資料檔案在基於OS系統級別被rm -rf 刪除後,只要資料庫在刪除後一直未被shutdown,那麼就可以手動恢復,恢復的前提是Oracle安裝在Linux系統下,下面是一個例項模擬 1. 在資料庫open的時候,直接刪除users表空間中的

三種語句可以恢復Oracle資料庫刪除資料

有很多朋友都遇到過在操作資料庫時誤刪除某些重要資料的情況,如果資料庫沒有備份而且資料有十分重要的情況下怎麼做才能找回誤刪除的資料呢?我在這裡為大家介紹幾種誤刪除資料庫中重要資料的恢復方法(不考慮全庫備份和利用歸檔日誌)第一種資料恢復方法是利用oracle提供的閃回方法進行資料

MySQL刪除檔案後,如何恢復

MySQL在執行中,如果誤刪除資料檔案,只有服務程序沒有退出,那麼就有辦法將其恢復。首先介紹Linux下lsof:他可以顯示開啟的檔案和網路連線。其次/proc目錄包含了反映核心和程序樹的各種檔案。/proc/504目錄包含的是PID是504的程序資訊。通過ps命令檢視程序的

sql server 數據庫表刪除恢復方法

局限性 數據庫表 刪除數據 多人 nbsp sof 工具 企業管理器 alt 由於意外操作,在企業管理器裏誤刪除了數據庫的表,那麽誤刪除了表數據怎麽辦呢? 很多人的一貫做法是先從日誌恢復,如果從日誌恢復不行就從mdf文件本身恢復。 那麽誤刪除數據後,最先要做的是先分離數據庫

Linux下Oracle 數據文件被物理刪除恢復

oracle linux 數據文件被物理誤刪除的恢復 #加深對Linux句柄的理解/緊急情況下Oracle的快速恢復不同於從Oracle中drop掉數據文件,在某些情況下,可能會遇到數據庫在運行時數據文件在操作系統級別被刪除,而此時Oracle實例並未崩潰,仍然處於open狀態。此時就要求盡量在最

mysql 刪除

mysql 誤刪除 MySQL誤刪除 數據回滾 sql數據回滾 mysql 誤刪除 本次使用的原美團開源Mysql 數據閃回工具 傳送門:https://github.com/Meituan-Dianping/MyFlash 一,簡介 MyFlash的前身是binlong2,後續是由美團點評公