phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する方法
phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する具体的な方法です。ここでは XAMPP 環境(Windows XP + MySQL 5.0 + phpMyAdmin 2.11.4)で試したもので紹介します。
このエントリーは以下の記事に触発されて書いたものです。
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 を再起動します。
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 にする必要はないかもしれませんが「混在しない方が良い」と言う記事もあります。
4.MyISAM と InnoDB の計測結果
Movable Type 4.261 の MyISAM と InnoDB の再構築時間の計測結果です。
ブログ記事数は約30で、ブログ記事の再構築と全体の再構築をそれぞれ5回ずつ行いました。ちなみにかなり非力な Windows マシンです(Pentium4 2.8GHz メモリ1.5GB)。InnoDB のチューニングは行なっていません。
MyISAM | InnoDB | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
ブログ記事 | 15s | 13s | 14s | 16s | 13s | 13s | 12s | 12s | 11s | 12s |
全体 | 53s | 51s | 48s | 52s | 55s | 43s | 41s | 43s | 42s | 39s |
ということで、若干 InnoDB の方が早くなりました。
- MySQLのrootログインで「Access denied for user 'root'@'localhost' (using password: YES)」に遭遇した場合の対処
- mysqlやmysqldumpで「 [Warning] Using a password on the command line interface can be insecure.」という警告が表示される場合の対処
- bashでMySQLのselect結果を出力する方法
- MySQL(phpMyAdmin)でエラー#1089になる場合の対処
- MySQLで「The used SELECT statements have a different number of columns」となる場合の対処
- mysqldumpで「Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces」となる場合の対処
- SSHポートフォワーディングでMySQLに接続する方法
- Windows向けMySQL管理クライアント「HeidiSQL」
- WindowsにMySQL(zip版)をインストールする
- MySQLのmax_user_connectionsについて
- phpMyAdminでインポートできない大きなファイルを一気にインポートできる「BigDump」
≫ 再構築を僅かでも高速化する手順 from Digiclo Online Memo
現在利用している共有レンタルサーバのうち、MySQLでストレージエンジンにInnoDBが利用可能なものがあったので実証実験としてMyISAM から Inn... [続きを読む]
おお、キャッチアップが早い。InnoDB関連のパラメータを変更すると、変わりますよ。はい。
>yagishitaさん
こんばんは。
元記事、勉強になります。ありがとうございます。
パラメータは色々試してみたいと思います。
ではでは!