MySQL 5.1.48リリース
出てます。今回は機能追加が1件、バグ修正が26件あります。バグ修正のうちレプリケーションに関するものが4件、パーティショニングに関するものが3件となっています。
InnoDB PluginはMySQL 5.1.47の1.0.8に引き続きバージョンアップが行われ、1.0.9となりました。バグレポートをいくつか見たところ、普通にユーザが増えてきて普通にバグ報告があがり始めてきているという印象です。当面サーバのバージョンアップと同期して淡々とバグ修正が続いていくものと思われます。
MyISAMからInnoDBへのレプリケーション
今回修正されたレプリケーション関連のバグのうち、マスタがMyISAMでスレーブがInnoDBという構成に関するものが2件あります。内容はほぼ同じです。
- MyISAMに対する更新処理をInnoDBなどトランザクション対応のスレーブにレプリケーションすると、不安定な状態になっていました。これはautocommitがオフの状態でトランザクション非対応のストレージエンジンからトランザクション対応のストレージエンジンにレプリケーションを行った際に、BEGINおよびCOMMIT文が一切スレーブに送られないためです。このようなことをすると、スレーブ側のトランザクションが永遠に終わらなくなってしまっていました。本バージョンからautocommit=1という文をレプリケーションすることで、スレーブのautocommitを強制的にオンにするように修正されました。(Bug#29288)
- マスタでautocommitをオフにしてトランザクション非対応のテーブルを更新すると、該当テーブルに対するCOMMIT文がバイナリログに記録されません。このときスレーブでトランザクション対応のテーブルを使用していると、スレーブのトランザクションが開始したまま永遠に終了しなくなるという問題がありました。(Bug#49522)
このような大きなバグが今まで残っていたのは驚きです。ただマスタがMyISAMでスレーブがInnoDBという構成にはそもそも何のメリットもありませんから、実際にトラブルを抱えているユーザはほぼ存在せず、これまで修正されてこなかったのだと思います。
これとは逆に、マスタがInnoDBでスレーブがMyISAMという構成はスケールアウトの観点から好まれる場合があります。ただしOpen database life: マスターInnoDB、スレーブMyISAMが勧められない理由で述べられているようにデメリットも多く、InnoDBの性能が改善された現在となってはもはやおすすめできる構成ではありません。
個人的にはレプリケーションの動作要件として、将来のバージョンで「マスタ/スレーブでストレージエンジンを揃えること」という一文を入れてしまってもよいのではないかと思います。バグレポートを見ていると、レプリケーション機能の品質向上にはかなり苦労しているように見受けられます。