phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する方法

phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する方法

Posted at October 3,2009 2:55 AM
Tag:[InnoDB, MyISAM, MySQL, phpMyAdmin]

phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する具体的な方法です。ここでは XAMPP 環境(Windows XP + MySQL 5.0 + phpMyAdmin 2.11.4)で試したもので紹介します。

このエントリーは以下の記事に触発されて書いたものです。

techknow.yagishita.net - MTを使ったサイト構築テクニック (2): ネタフルにおける再構築チューニング

1.my.cnf を変更する

ストレージエンジンを MyISAM から InnoDB に変更するには、テーブル単位で変更します。phpMyAdmin の GUI によるストレージエンジンの変更方法は、

  • 変更したいテーブル名をクリック
  • 上部タブの「操作」をクリック
  • 「テーブルオプション」の「ストレージエンジン」から「InnoDB」を選択

となりますが、XAMPP のデフォルトの MySQL の設定では、phpMyAdmin から InnoDB を選択することができません。

ストレージエンジン選択

したがって、まず最初に、C:¥xampp¥mysql¥bin¥my.cnf(my と表示されたファイル)を編集します。

my.cnf を任意のエディタで開き、

# Comment the following if you are using InnoDB tables
skip-innodb
#innodb_data_home_dir = "C:/xampp/mysql/"
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = "C:/xampp/mysql/"
#innodb_log_arch_dir = "C:/xampp/mysql/"
## You can set .._buffer_pool_size up to 50 - 80 %
## of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
## Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

の部分を探し、以下のように「skip-innodb」をコメントアウトし、以降のすべてのコメントアウトを解除します。

# Comment the following if you are using InnoDB tables
#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/"
innodb_log_arch_dir = "C:/xampp/mysql/"
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

編集が終わったら保存します。

2.MySQL を再起動する

my.cnf を編集しただけでは実際の動作に反映されないので、XAMPP コントロールパネルを使って MySQL を再起動します。

MySQL を再起動

3.ストレージエンジンを MyISAM から InnoDB に変更する

phpMyAdmin で該当のDBを選択したあと、InnoDB に変更したいテーブルをクリック。

変更したいテーブルをクリック

上部のタブから「操作」をクリック。

「操作」をクリック

「テーブルオプション」の「ストレージエンジン」から「InnoDB」を選択

ストレージエンジン選択

または、テーブル選択前の状態の上部タブの「SQL」をクリックして、以下のSQL を実行します(まとめて実行するとエラーになりましたが...)。この SQL は Movable Type 4.261 のものです。

ALTER TABLE `mt_asset`  ENGINE = 'InnoDB';
ALTER TABLE `mt_asset_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_association`  ENGINE = InnoDB;
ALTER TABLE `mt_as_ua_cache`  ENGINE = InnoDB;
ALTER TABLE `mt_author`  ENGINE = InnoDB;
ALTER TABLE `mt_author_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_backgroundrebuild`  ENGINE = InnoDB;
ALTER TABLE `mt_blog`  ENGINE = InnoDB;
ALTER TABLE `mt_blog_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_category`  ENGINE = InnoDB;
ALTER TABLE `mt_category_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_comment`  ENGINE = InnoDB;
ALTER TABLE `mt_comment_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_config`  ENGINE = InnoDB;
ALTER TABLE `mt_entry`  ENGINE = InnoDB;
ALTER TABLE `mt_entry_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_field`  ENGINE = InnoDB;
ALTER TABLE `mt_fileinfo`  ENGINE = InnoDB;
ALTER TABLE `mt_ipbanlist`  ENGINE = InnoDB;
ALTER TABLE `mt_log`  ENGINE = InnoDB;
ALTER TABLE `mt_notification`  ENGINE = InnoDB;
ALTER TABLE `mt_objectasset`  ENGINE = InnoDB;
ALTER TABLE `mt_objectscore`  ENGINE = InnoDB;
ALTER TABLE `mt_objecttag`  ENGINE = InnoDB;
ALTER TABLE `mt_permission`  ENGINE = InnoDB;
ALTER TABLE `mt_placement`  ENGINE = InnoDB;
ALTER TABLE `mt_plugindata`  ENGINE = InnoDB;
ALTER TABLE `mt_profileevent`  ENGINE = InnoDB;
ALTER TABLE `mt_profileevent_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_role`  ENGINE = InnoDB;
ALTER TABLE `mt_session`  ENGINE = InnoDB;
ALTER TABLE `mt_tag`  ENGINE = InnoDB;
ALTER TABLE `mt_tbping`  ENGINE = InnoDB;
ALTER TABLE `mt_tbping_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_template`  ENGINE = InnoDB;
ALTER TABLE `mt_templatemap`  ENGINE = InnoDB;
ALTER TABLE `mt_template_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_touch`  ENGINE = InnoDB;
ALTER TABLE `mt_trackback`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_error`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_exitstatus`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_funcmap`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_job`  ENGINE = InnoDB;

なお、すべてのテーブルを InnoDB にする必要はないかもしれませんが「混在しない方が良い」と言う記事もあります。

漢(オトコ)のコンピュータ道 - MyISAMからInnoDBへ切り替えるときの注意点

4.MyISAM と InnoDB の計測結果

Movable Type 4.261 の MyISAM と InnoDB の再構築時間の計測結果です。

ブログ記事数は約30で、ブログ記事の再構築と全体の再構築をそれぞれ5回ずつ行いました。ちなみにかなり非力な Windows マシンです(Pentium4 2.8GHz メモリ1.5GB)。InnoDB のチューニングは行なっていません。

MyISAMInnoDB
ブログ記事15s13s14s16s13s13s12s12s11s12s
全体53s51s48s52s55s43s41s43s42s39s

ということで、若干 InnoDB の方が早くなりました。

関連記事
トラックバックURL


トラックバック

再構築を僅かでも高速化する手順 from Digiclo Online Memo
現在利用している共有レンタルサーバのうち、MySQLでストレージエンジンにInnoDBが利用可能なものがあったので実証実験としてMyISAM から Inn... [続きを読む]

Tracked on October 5, 2009 8:25 AM
コメント

おお、キャッチアップが早い。InnoDB関連のパラメータを変更すると、変わりますよ。はい。

[1] Posted by yagishita : October 3, 2009 9:10 PM

>yagishitaさん
こんばんは。
元記事、勉強になります。ありがとうございます。
パラメータは色々試してみたいと思います。
ではでは!

[2] Posted by yujiro logo : October 4, 2009 1:09 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)