2012-04-06 8 views
5

myisam専用の32 GB RAM mysqlサーバがデフォルト設定で動作しています。私はテーブルのロックを避けるために、1つのテーブルのInnoDBにエンジンタイプを変更したいと思っています。それは5,000万レコードを持ち、ディスク上のサイズは約15GBです。私は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

私の質問は、現在のcnfにinnodb関連のパラメータがないため、my.cnf configの変更を行う必要があることです。 – shantanuo

+0

下記の解決策は、 "SHOW ENGINES"を提案しています。これにより、my.cnfファイルをさらに変更する必要があるかどうかがわかります。もしそうなら、 "skip-innodb"がコメントアウトされていることを確認してください。 mysqlエンジンを正常に再起動することを忘れないでください。 –

+0

この場合、InnoDBはデフォルトで実行されます。私の質問は、デフォルトを変更する必要があるかどうかです。それとも、長期的にはデフォルト設定で正常に動作しますか?私は3つの最も重要なパラメータを短くリストしました、私はもっと知りたいと思っていました。 – shantanuo

7

まず、データベースがInnoDBエンジンをサポートしているかどうかをチェックしてください(サポートされていると思います):

SHOW ENGINES\G 

ので、すでにそこに、代わりにinnodb related parametersデフォルトでそれらをチェックしている場合:

SHOW VARIABLES LIKE '%innodb%' 

、それらを理解し、特定のニーズに変更してみてください。デフォルトのパラメータを使用しても、InnoDBテーブルを使ってarroundを実行しても問題ありません。

あなたが唯一のInnoDBテーブルを作成したい場合、あなたはどちらかあなたの現在のセッションのために、あなたのデフォルトのストレージエンジンを変更することができます。デフォルトのストレージエンジンを使用してSET storage_engine=INNODB;たり、configにオプション。

ところで、InnoDBにテーブルを変換する最速の方法は、上記の方法ではありません。あなたがに比べて保存あなたが手動で必要なインデックスを追加する必要がありますが、時間(と痛み)その通常の価値もちろん

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

:一つは、単純にデータを挿入することでのInnoDBのテーブルを変換するには、次の操作を行うことができます少し大きいテーブルのALTER TABLE ...

+0

もっと便利な答えが受け入れられないのはなぜですか?私の+1 – fancyPants

関連する問題