2009年10月 3日

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

October 3,2009 2:55 AM
Tag:[, , , ]
Permalink

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 の方が早くなりました。

Comments [2] | Trackbacks [1]
Now loading...
Introduction
List of "MySQL"
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.02