將 MySQL 5.6 datadir 從機器 A (pathA) 遷移至機器 B (pathB) 後啟動失敗,錯誤日誌:
/usr/sbin/mysqld: File '/home/mysql_3306/mysql-bin.000003' not found (Errcode: 2)
[ERROR] Failed to open log (file '/home/mysql_3306/mysql-bin.000003', errno 2)
[ERROR] Could not open log file
[ERROR] Can't init tc log
[ERROR] Aborting
明明已修改 my.cnf 所有路徑,為何仍尋找舊路徑?
log-bin-index 指向的索引檔(預設 mysql-bin.index)內部以絕對路徑記錄每個 binlog 檔案位置。cd /new/pathmysql-bin.index,將每行舊路徑替換為新路徑:sed -i 's|/home/mysql_3306/|/home/mysql_3306_bak/|g' mysql-bin.indexsystemctl start mysqldmv mysql-bin.index mysql-bin.index.bakPURGE BINARY LOGS 會報錯「Target log not found in binlog index」。log-bin-index 指向新路徑(配置層面修正)[mysqld]
log-bin = /new/path/mysql-bin
log-bin-index = /new/path/mysql-bin.index
需確保索引檔內容已為新路徑(結合方案一)。
/tmp/mysql-bin.000005)。PURGE BINARY LOGS TO 'mysql-bin.000007' → 報錯 File '/tmp/...' not found。結論:MySQL 啟動時會檢查索引中所有 binlog 是否存在,僅當「最後一條」無效時才阻止啟動。
FLUSH LOGS 產生新 binlog,減少舊檔依賴。rsync -av --delete 同步整個 datadir 目錄(含索引檔),保持相對路徑一致。my.cnf 與 binlog.index。mysqldump --single-transaction --master-data=2)遷移,完全規避物理路徑問題。