Mysql
將 mySQL (5.6) 數據庫從 MyISAM 更改為 InnoDB
我最近將我的 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
試試看 !!!