2012-04-06 49 views
5

我有一個myisam只有專用32 GB RAM的MySQL服務器運行默認配置。我想將引擎類型更改爲一個表的InnoDB以避免表鎖。它擁有5000萬條記錄,磁盤大小約爲15 GB。我正在使用MySQL版本5.5 我想我將需要添加以下選項並重新啓動mysql。更改表格類型爲InnoDB

innodb_buffer_pool_size=1G 
innodb_log_file_size=100M 
innodb_file_per_table=1 

還有什麼考慮而改變發動機類型是必要的?

回答

13

你實際上正在運行一個命令來轉換每個表。

它去更快的第一排序表:

ALTER TABLE tablename ORDER BY primary_key_column; 

然後,運行alter命令:

ALTER TABLE tablename ENGINE = INNODB; 

如果表是真正的大它可能需要一段時間,它會使用很多你的CPU ......

+0

我的問題是關於my.cnf配置需要做什麼更改,因爲當前的cnf沒有innodb相關的參數。 – shantanuo 2012-04-06 05:52:20

+0

下面的解決方案建議「SHOW ENGINES」,它會告訴你是否需要進一步更改my.cnf文件。如果是這樣,只要確保「skip-innodb」已被註釋掉。記得要優雅地重啓你的mysql引擎。 – 2012-04-06 14:03:37

+0

在這種情況下,InnoDB將運行默認值。我的問題是關於什麼樣的默認值需要改變。或者從長遠來看,它會在默認設置下正常工作嗎?我列出了3個最重要的參數,我只是想知道更多。 – shantanuo 2012-04-08 01:09:58

7

首先檢查你的數據庫是否支持InnoDB引擎(我敢打賭它支持;)):

SHOW ENGINES\G 

如果是這樣,已經默認到位innodb related parameters,以檢查它們:

SHOW VARIABLES LIKE '%innodb%' 

,並嘗試瞭解他們,改變您的特定需求。即使你使用默認的參數,你現在也可以和InnoDB表一起玩。

如果你想創建只有InnoDB表,你可以改變你的默認存儲引擎,無論是與當前會話:SET storage_engine=INNODB;或在你的配置使用默認存儲引擎選項。

順便說一句,將錶轉換爲InnoDB的最快方式不是上述方式。一個可以做以下簡單地插入數據到錶轉換爲InnoDB的:

CREATE TABE new AS SELECT * FROM old WHERE 1<>1; 
ALTER TABLE new ENGINE = INNODB; 
INSERT INTO new SELECT * FROM old; 

當然,你必須添加你需要手動的指標,但它通常是值得花時間(和疼痛)您節省相比, ALTER TABLE ...放在稍大的桌子上。

+0

爲什麼不接受更有用的答案?從我+1 – fancyPants 2012-05-09 11:32:03

相關問題