MySQLのストレージエンジンをInnoDBにする方法
MyHome Portalでは、MySQLのストレージエンジンはMyISAMを使っています。
MySQLの代表的なストレージエンジンには、MyISAMとInnoDBがありますが、
【漢(オトコ)のコンピュータ道:MyISAMからInnoDBへ切り替えるときの注意点】
http://nippondanji.blogspot.com/2009/02/myisaminnodb.html
によれば、MyISAMの欠点として以下のものが上げられています。
・トランザクション対応ではない。
・クラッシュセーフではない。
・更新と参照が入り乱れた場合の同時実行性能がよくない。
・テーブルが大きく(数億行とか)なるとINSERTの性能が劣化する。
2番目の「クラッシュセーフではない」というのが一番気になるとところです。
ということで、MyHome PortalのストレージエンジンをInnoDBにしたい方のための簡単な手順を以下に書きます。
なお、トラブルが発生してもサポートできませんので、あくまでも自己責任でお願いいたします。事前にMyISAMの状態でバックアップをとっておいてください。
以下、MySQL管理者ユーザーrootのパスワードを「kanri789」、インストールドライブを「D:」として説明します。
●1.XAMPPは初期状態では、InnoDBが使えませんので、InnoDBを有効にする必要があります。
【参考:XAMPP環境でMySQLのInnoDBを有効にする】
http://code.xenophy.com/?p=127
[xamppインストールディレクトリ]/mysql/bin/my.cnf
(例:D:\xampp\mysql\bin\my.cnf)
を以下のように編集して、MySQLを再起動します。
skip-innodbの先頭に#を頭につけてコメントアウトします。
skip-innodbの下4行のinnodb_...の頭の#を外します。
その他innodb_...は任意で設定してください。
------------------------------------------------------
#skip-innodb
innodb_data_home_dir = "D:/xampp/mysql/"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "D:/xampp/mysql/"
innodb_log_arch_dir = "D:/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
------------------------------------------------------
コマンドプロンプトで、以下を実行してMySQLを再起動します。
net stop mysql
net start mysql
------------------------------------------------------
●2.MyHome Portalの実運用データベースの更新系テーブルをInnoDBにします。
コマンドプロンプトで、以下を実行します。
「ERROR 1025 (HY000): Error on rename ...」
というエラーが出る場合があります。その場合は、以下の一連の処理を再実行します。多分2度目はエラーが出ません。
------------------------------------------------------
mysql -u root -pkanri789
use _mydb_abook;
ALTER TABLE m_abook ENGINE=InnoDB;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_check_caption ENGINE=InnoDB;
use _mydb_account;
ALTER TABLE m_account ENGINE=InnoDB;
ALTER TABLE m_friends ENGINE=InnoDB;
ALTER TABLE m_public ENGINE=InnoDB;
ALTER TABLE z_loginlog ENGINE=InnoDB;
use _mydb_bbs;
ALTER TABLE m_bbs ENGINE=InnoDB;
ALTER TABLE m_category ENGINE=InnoDB;
use _mydb_calendar;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_schedule ENGINE=InnoDB;
ALTER TABLE m_todo ENGINE=InnoDB;
use _mydb_chat;
ALTER TABLE m_messages ENGINE=InnoDB;
use _mydb_diary;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_marker ENGINE=InnoDB;
ALTER TABLE m_schedule ENGINE=InnoDB;
use _mydb_index;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_homepage ENGINE=InnoDB;
ALTER TABLE m_oftenuse ENGINE=InnoDB;
use _mydb_kakeibo;
ALTER TABLE m_chokin ENGINE=InnoDB;
ALTER TABLE m_ginkou ENGINE=InnoDB;
use _mydb_memo;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_memo ENGINE=InnoDB;
use _mydb_rss;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_rss ENGINE=InnoDB;
use _mydb_sticky;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_notes ENGINE=InnoDB;
use _mydb_study;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_category2 ENGINE=InnoDB;
ALTER TABLE m_mycheck ENGINE=InnoDB;
ALTER TABLE m_study ENGINE=InnoDB;
use _mydb_zid_mgr_a;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_pass ENGINE=InnoDB;
use _mydb_zid_mgr_b;
ALTER TABLE m_pass2 ENGINE=InnoDB;
exit;