MySQL恢復誤刪除的ibd文件

模擬誤刪除

lsof |grep g_device_action_base.ibd

查看當前該ibd文件對應的內存中的文件句柄

ll /proc/8084/fd/35

查看文件句柄可以看到,實際就是對文件的一個軟鏈接

rm /data/mysql/data/demo/g_device_action_base.ibd
ll /proc/8084/fd/35

刪除該文件後,fd文件句柄中顯示該文件已被標記爲刪除狀態

查看刪除後數據庫中表的狀態

-- 實際登錄數據庫依舊能對該表做查詢
root@localhost[demo]> select * from g_device_action_base limit 1\G
*************************** 1. row ***************************
           id: 185820473
          uid: 779085e3ac9a32e8927099c2be506228
    domain_id: LhziEhqb8WUA5zgS
      machine: IOS
     app_type: jw_app_thirdapp
       app_id: 3e261dcf5485fb0f1c0052f838ae6779
  action_time: 1595222484
action_status: 1
       source: jw_app_hard
          url: https://magicbox.hwwt2.com/api2/url/redirect?url=https%3A%2F%2Fomdfis.hwwt2.com%2FFIS2-OMD-Mobile%2Fapp%2Findex.html&app_id=3e261dcf5485fb0f1c0052f838ae6779&type=jw_app_thirdapp&id=3e261dcf5485fb0f1c0052f838ae6779
1 row in set (0.01 sec)

-- 也可以做數據插入操作
root@localhost[demo]> insert into g_device_action_base select null,'779085e3ac9a32e8927099c2be506228','LhziEhqb8WUA5zgS','IOS','jw_app_thirdapp','3e261dcf5485fb0f1c0052f838ae6779','1595222484',1,'jw_app_hard','https://magicbox.hwwt2.com';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

恢復操作

## 先登錄數據庫中將該表鎖住,防止後續在拷貝數據時有數據變化
lock table demo.g_device_action_base read;

## 將文件句柄文件拷貝回數據目錄並修改權限
cp /proc/8084/fd/35 /data/mysql/data/demo/g_device_action_base.ibd
chown mysql:mysql /data/mysql/data/demo/g_device_action_base.ibd

恢復完成後fd文件句柄依舊是處於deleted`狀態,需要將數據庫重啓,重啓前可對數據庫先做備份

systemctl restart mysql_3306

注意事項

  1. 在恢復過程中數據庫一定是處於運行狀態,否則/proc中MySQL的相關數據會永久清除
  2. 恢復後一定記得對數據庫做備份操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章