Mysql

將 mySQL (5.6) 數據庫從 MyISAM 更改為 InnoDB

  • March 14, 2014

我最近將我的 CPanel 伺服器從 mySQL 5.5 升級到了 mySQL 5.6,因為它現在支持 InnoDB 的全文搜尋。現在,我對 mySQL 不太擅長,所以我想知道除了執行之外還有什麼特別需要記住的

ALTER TABLE my_table ENGINE=InnoDB;

我的幾個表都有全文索引。他們會發生什麼?索引會自動轉換嗎?還是我必須在之後手動重新建構它們?

如果您不更改任何 FULLTEXT 啟動參數,則從 MyISAM 到 InnoDB 的轉換將負責為 InnoDB 創建 FULLTEXT 索引。

轉換步驟

如果您可以從命令行界面連接到 MySQL,請執行此查詢

SELECT DISTINCT table_schema,table_name
FROM information_schema.statistics WHERE index_type='FULLTEXT';

這將為您提供每個具有 FULLTEXT 索引的表。

使用該查詢,執行此查詢

SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB') Cmd
FROM (SELECT DISTINCT table_schema,table_name
FROM information_schema.statistics WHERE index_type='FULLTEXT') A
INNER JOIN information_schema.tables B USING (table_schema,table_name)
WHERE B.engine='MyISAM';

這將向您展示將具有 FULLTEXT 索引的 MyISAM 表轉換為 InnoDB 的所有命令。

您可以將命令轉儲到文本文件中。

SQL="SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB')"
SQL="${SQL} FROM (SELECT DISTINCT table_schema,table_name"
SQL="${SQL} FROM information_schema.statistics"
SQL="${SQL} WHERE index_type='FULLTEXT') A"
SQL="${SQL} INNER JOIN information_schema.tables B"
SQL="${SQL} USING (table_schema,table_name)"
SQL="${SQL} WHERE B.engine='MyISAM'"
mysql -uroot -p -ANe"${SQL}" > ConversionScript.sql
less ConversionScript.sql

這將創建轉換腳本並讓您查看它。

如果您對腳本的內容感到滿意,請登錄 mysql 並執行以下命令:

mysql> source ConversionScript.sql

試試看 !!!

引用自:https://serverfault.com/questions/580645