teketeke_55の日記

技術メモとか

■InnodbとmyIsamが混在している環境でのレプリケーション再設定

[mysql][レプリケーション]

dbのレプリケーション構成でマスターmyIsam,スレーブinnodb
スレーブmyIsam,マスターinnodbの構成サーバが見つかったのでinnodbに統一する作業を行った。
サーバのバージョンは

  • CentOS5.7
  • 5.1.59-community-log MySQL Community Server (GPL)

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を停止してから

/var/lib/mysql/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