首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 存儲引擎切換實戰:MyISAM 與 InnoDB 互轉、配置文件修改與 ALTER TABLE 方案對比

     編輯:MySQL 綜合教學

MySQL 存儲引擎切換全方案:從選型到遷移實操

引擎特性對比與選型

結論: 現代應用 默認選 InnoDB,MySQL 5.5+ 已默認。

方案一:配置文件修改默認引擎 (新表生效)

# /etc/my.cnf
[mysqld]
default-storage-engine = InnoDB
# 或
default-storage-engine = MyISAM

# 重啟生效
service mysql restart

僅影響 建表時未指定 ENGINE 的新表,不影響現有表。

方案二:建表時顯式指定 (推薦,明確可控)

-- MyISAM → InnoDB (推薦)
ALTER TABLE t_myisam ENGINE=InnoDB;

-- InnoDB → MyISAM
ALTER TABLE t_innodb ENGINE=MyISAM;

-- 驗證
SHOW TABLE STATUS FROM db_name LIKE 't_%';
-- Engine 列顯示當前引擎

SHOW CREATE TABLE t_myisam;  -- 末尾顯示 ENGINE=InnoDB

遷移關鍵注意事項

特性MyISAMInnoDB
事務支援❌✅ ACID
行級鎖❌ (表鎖)✅
外鍵❌✅
崩潰恢復❌ (需修復)✅ (Redo/Undo Log)
全文索引✅ (5.6-)✅ (5.6+)
壓縮表✅✅ (5.7+)
適用場景只讀/日志/非關鍵核心業務/高併發/事務

大表遷移最佳實踐 (pt-online-schema-change)


驗證清單

  1. SHOW TABLE STATUS 確認 Engine 列
  2. SHOW CREATE TABLE 確認 ENGINE 子句
  3. 檢查主鍵/索引定義完整性
  4. 業務端壓測驗證併發性能
  5. 監控 Innodb_row_lock_waits / Table_locks_waited

常見問題

  1. 外鍵遷移失敗:InnoDB 要求被引用表也為 InnoDB,需同步遷移關聯表
  2. 全文索引報錯:5.6 前 InnoDB 不支援,升級或轉 MyISAM
  3. 磁盤空間不足:遷移需臨時雙倍空間,預留 2x 表大小
  4. 自增 ID 重置:遷移不改變自增值,但 InnoDB 重啟後重新計算 max+1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
項目MyISAM → InnoDBInnoDB → MyISAM
鎖模式表鎖 → 行鎖 (併發提升)行鎖 → 表鎖 (併發下降)
空間變化數據+索引合併存 ibdata/.ibd (通常增大 20-30%)分離 .MYD/.MYI (通常縮小)
主鍵要求隱式生成 6 字節 RowID無隱式主鍵
全文索引5.6+ 支援,需重建原生支援
操作耗時大表需數小時 (重建聚簇索引)較快 (僅複製文件)
在線 DDL5.6+ 支援 ALGORITHM=INPLACE需鎖表複製