だるろぐ

だるいぶろぐです

log-binのデフォルト値を使わない

mysqlレプリケーションするときは my.cnf の mysqld セクションに

[mysqld]
log-bin

などと書いてバイナリログを吐く。


このように log-bin とだけ書いた場合、バイナリログの名前は5.1では HOSTNAME-bin.000001 のようなものになる。

--log-bin[=base_name] オプションで起動すると、mysqldで、データ更新に関わる SQL ステートメントのすべてをログ ファイルに書き込みます。base_name の値を指定しない場合、デフォルト名は、-bin を元にするホスト マシンの名前になります。

http://dev.mysql.com/doc/refman/5.1/ja/binary-log.html

5.0では mysqld-bin.000001 だったはず。
まあ、5.1(以降?)では、 log-bin とだけ書いたらバイナリログの名前にホスト名が使われる。


で、もしdbの再起動などが起こった場合。レプリケーションが再開されるときには、当然ながらそれまで使っていたファイル名のバイナリログが使われる。
で。dbの再起動前後でホスト名が変更されていると、レプリケーションが開始されない。
そりゃそうだ、それまで使ってたファイルがどっかいったのだから。


「ホスト名なんて変更するもんでもないし、バイナリログの名前は何でもいいし」のような考えが有ろうが無かろうが、db再起動前後でホスト名が何故か変わるような環境だった場合に加えて

  • サーバを再起動した場合
  • mysqldを再起動した場合
  • 他、何かが起こった場合

に、レプリケーションがはじまらねぇーな事態になって悲劇のもととなるので、何でもいいから指定しておきましょう。

log-bin=hoge

とかでもいいから。サービス名とかでもいいから。とにかく未指定はやめましょう。


分かりやすく言うとすいませんでした。