■InnodbとmyIsamが混在している環境でのレプリケーション再設定
[mysql][レプリケーション]
dbのレプリケーション構成でマスターmyIsam,スレーブinnodb
スレーブmyIsam,マスターinnodbの構成サーバが見つかったのでinnodbに統一する作業を行った。
サーバのバージョンは
mysql.logを見ると下記のエラーが発生していた。
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes InnoDB: than specified in the .cnf file 0 268435456 bytes!
どうやらパフォーマンスチューニングをした際にib_logfileを消し忘れていた模様。
そのせいでInnoDBが起動できずにデフォルトのmyIsamで起動していた。
> SHOW ENGINES; +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 8 rows in set (0.00 sec)
ひとまず以下の作業でinnodbを有効にした。
mysqlを停止してから
ib_logfile0
ib_logfile1
を移動してmysqlを起動
ログを見てみると今度は正常に起動している
中身が反映されているか確認
mysql> SHOW ENGINES; +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 8 rows in set (0.00 sec)
大丈夫みたい。
レプリケーション状態を確認したところこちらも問題ない
そのあとに
- ALTER TABLE table_name ENGINE=InnoDB;
でエンジンを変える必要があるのだがmysqlのシステム周りを変えるとバグることもあるらしいので
今回はそれぞれinnodbで動いていたサーバから取得したdumpデータからリストアすることにした
結果は問題なくレストアできた。
innodbが起動しなくてもmysql自体は動くのね。。。レプリケーションは問題なかったから油断していた。
調べるとマスターinnodb,スレーブmyIsamという手法もあるにはあるらしい。
- ストレージ エンジンが異なるマスタとスレーブのレプリケーション
http://dev.mysql.com/doc/refman/5.1/ja/replication-solutions-diffengines.html
- そのほか参考にしたサイト
http://open-groove.net/mysql/check-table-type/
http://d.hatena.ne.jp/koziy/20070911/1189472682
http://nippondanji.blogspot.com/2009/02/myisaminnodb.html