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

MySQL 存儲引擎批量轉換神器:mysql_convert_table_format 實戰指南(InnoDB↔MyISAM)

     編輯:MySQL 綜合教學

需將全庫數十張表從 InnoDB 遷移至 MyISAM(或反向)?mysql_convert_table_format 這個 Perl 腳本工具能一次性完成,省去逐表 ALTER TABLE 的繁瑣。

工具概覽

  • 路徑:RPM 安裝通常在 /usr/bin/ 或 /usr/sbin/。
  • 核心功能:批量轉換指定資料庫/表的存儲引擎,預設目標 MyISAM。
  • 依賴:Perl 環境、MySQL 客戶端庫。

核心參數速查表

參數說明範例
--engine目標引擎(預設 MyISAM)--engine=InnoDB
--user/--password連線憑證--user=root --password='xxx'
--host/--port/--socket連線目標--socket=/tmp/mysql.sock
--force遇錯繼續轉換其餘表大庫遷移建議開啟
--verbose輸出詳細進度排查失敗表必備

實戰演練:全庫 InnoDB → MyISAM

# 1. 確認工具存在
ls /usr/bin/mysql_convert_table_format

# 2. 執行轉換(以資料庫 mo 為例)
mysql_convert_table_format mo \
  --user=root --password='mysql' \
  --socket=/tmp/mysql.sock \
  --engine=MyISAM \
  --force --verbose

# 3. 驗證結果
ls -lh /opt/mysql-data/mo/*.MYD /opt/mysql-data/mo/*.MYI
# 出現 .MYD/.MYI 即轉換成功;原 .ibd 消失

反向操作:MyISAM → InnoDB

工具預設目標是 MyISAM,若需轉 InnoDB 有兩法:

  1. 修改腳本:vi /usr/bin/mysql_convert_table_format,第 26 行 $opt_type = "myisam" 改為 "innodb"。
  2. 參數覆蓋:--engine=InnoDB(新版本支援,優先嘗試)。

避坑指南

  • 停寫窗口:轉換期間表會被鎖定,建議主從切換至從庫操作,或維護窗口執行。
  • 外鍵約束:MyISAM 不支援外鍵,轉換前必須 ALTER TABLE ... DROP FOREIGN KEY,否則報錯中斷。
  • 分區表:5.6+ 版本支援分區表轉換,舊版本需先移除分區。
  • 系統表:mysql、performance_schema、sys 庫勿動。

驗證腳本

SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mo' AND ENGINE != 'MyISAM';
-- 若無輸出,全庫轉換完成

搭配 pt-online-schema-change 可實現無鎖遷移,大表場景建議改用該工具。mysql_convert_table_format 適合中小表、維護窗口允許的批量轉換場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved