1. 程式人生 > >mysql誤刪除ibdata1以及日誌ib_logfile*

mysql誤刪除ibdata1以及日誌ib_logfile*

假設執行了誤刪除操作,又是線上業務,先安心,mysql沒有重啟之前不會影響現有操作,mysqld在執行狀態中,會保持這些檔案為開啟狀態,即使把它們刪除了,它們仍舊存在於檔案系統中,mysqld仍然可以對其進行讀寫。

恢復
第一步:檢視mysqld的程序id
可以top或者ps-ef|grep mysql都可以,每個程序在/proc/程序號下都有資料夾,假設mysql的程序號是14101
命令:ls -la /proc/14101/fd/ | grep -e ibdata -e ib_

第二步:停止mysql的一切業務
為了保證檔案正常和資料一致,需要停止你們的線上業務,注意是mysql讀寫的業務,不是關閉mysql,然後等待mysql將之前的操作全部寫入記錄到磁碟。
命令(mysql裡面執行):SHOW engine innodb STATUS
checkpoint age 就是 Log sequence number的值減去 Last checkpoint at的值,
如果為0,那麼表示所有的page都flush到硬碟檔案中了,確保執行緒不再執行任何操作

第三步、複製檔案
cp /proc/14101/fd/3 /var/lib/mysql/ibdata1
cp /proc/14101/fd/8 /var/lib/mysql/ib_logfile0
cp /proc/14101/fd/9 /var/lib/mysql/ib_logfile1

第四步、授權重啟
chown -R mysql:mysql ib*
systemctl restart mysqld

注意:本人並沒有實踐過,只是在網上搜索文章得時候看到了別人得博文,覺得線上可能會碰到這種問題,就跟著整理下。