線上誤刪 ibdata1、ib_logfile* 並不代表資料立即丟失——只要 mysqld 進程還在,Linux 會在 /proc/PID/fd/ 保留被刪除檔案的開啟檔案描述符。本文實戰恢復全流程。
/proc/PID/fd/N 是指向該檔案的符號連結,可 cp 出來。
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0; -- 加速 flush
-- 觀察 checkpoint age 歸零
mysql> SHOW ENGINE INNODB STATUS\G
-- LOG SEQUENCE NUMBER = LAST CHECKPOINT AT 即為完成
INSERT BUFFER: Ibuf: size 1Purge done for trx's n:o < currentFILE I/O: all threads waiting for i/o request
PID=$(pidof mysqld)
cp /proc/$PID/fd/3 /var/lib/mysql/ibdata1 # fd 編號以實際為準
cp /proc/$PID/fd/4 /var/lib/mysql/ib_logfile0
cp /proc/$PID/fd/5 /var/lib/mysql/ib_logfile1
chown mysql:mysql /var/lib/mysql/ib*
mysql> UNLOCK TABLES;
systemctl restart mysqld
# 檢查錯誤日誌無報錯,業務驗證正常
SET GLOBAL read_only=ON 降低寫入,再執行上述流程。ibdata1、ib_logfile*)。DROP/SHUTDOWN 權限,刪除檔案需 sudo 審批。chattr +i /var/lib/mysql/ibdata1 防誤刪(維護時暫時去掉)。冷靜、不重啟、利用 /proc 搶救,是誤刪 ibdata1 存活的關鍵。