MyISAM 表級鎖在高併發寫入場景下極易導致表鎖死、連接堆積、網站返回 502。InnoDB 支持行級鎖、事務、外鍵、崩潰恢復,是高併發業務的首選。本文提供標準遷移流程與進階零停機方案。
mysqldump -d -u xxx -p centos > centos_table.sql
# -d 參數:僅導出結構
sed -i 's/MyISAM/INNODB/g' centos_table.sql
# 注意:大小寫敏感,建議先 grep 確認匹配行
mysql -e "CREATE DATABASE centos_new;"
mysql -u root -p centos_new < centos_table.sql
# 驗證:SHOW TABLE STATUS FROM centos_new; 確認 Engine=InnoDB
mysqldump -t -u root -p centos > centos_data.sql
# -t 參數:僅導出數據
mysql -u root -p centos_new < centos_data.sql
上述方案需業務停寫,對核心業務不可接受。推薦使用成熟工具:
pt-online-schema-change --alter "ENGINE=InnoDB" D=centos,t=your_table --execute
ALTER TABLE ... ENGINE=InnoDB 仍需重建表,需配合上述工具。innodb_buffer_pool_size 是否足夠(建議 ≥ 數據+索引總量 1.2 倍)AUTO_INCREMENT 計數器:手動同步或重置,避免主鍵衝突MyISAM 轉 InnoDB 是架構升級必經之路。小表走標準流程,核心大表必上 pt-osc 或 gh-ost。遷移前全鏈路壓測,遷移中監控主從延遲、磁盤 IO、Buffer Pool 命中率,遷移後驗證業務功能與性能基線。