在搭建 MySQL 主從復制時,若主從庫的 default-storage-engine 設置不同(如主庫 InnoDB、從庫 MyISAM),直接複製 data 目錄啟動從庫,會導致從庫僅有庫結構,表全部丟失,甚至 mysql 系統庫也為空。這是因為表定義(.frm)與數據/索引文件(.ibd/.MYD/.MYI)耦合,引擎不匹配會使 MySQL 無法識別表文件。
ibdata1)或獨立表空間(.ibd)。.MYD/.MYI 文件。ibdata1、.ibd)被帶到從庫,但從庫啟動時按 MyISAM 邏輯尋找文件,找不到對應文件,判定表不存在。mysql 同理,導致權限、元數據全失。my.cnf/my.ini,設定 default-storage-engine=INNODB,重啟驗證。# 主庫
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 記錄 File, Position
mysqldump --all-databases --master-data=2 --single-transaction > full.sql
UNLOCK TABLES;
# 從庫
mysql < full.sql
CHANGE MASTER TO MASTER_LOG_FILE='xxx', MASTER_LOG_POS=yyy;
START SLAVE;
datadir(含 ibdata1、.ibd、redo log、binlog 等)。auto.cnf(避免 UUID 衝突),調整 server-id。CHANGE MASTER TO ... 指向複製來的 binlog 位置。mysql 库,若版本不一致可能導致系統表結構不兼容,建議初始化從庫後再導入主庫的用戶權限(pt-show-grants)。若已發生表丟失,且無備份,數據找回極其困難。請務必建立定期邏輯/物理備份策略,並定期演練恢復。