web-dev-qa-db-ja.com

MySQL 5.5マスターから5.1スレーブへのレプリケーションは可能ですか?

ショートバージョン:5.5マスターから5.1スレーブへのレプリケーションは可能ですか?

ロングバージョン:5.0から5.5への大規模なアップグレードを行いました。 400GBのデータベースをダンプして5.5にインポートするのは長いプロセスでした。

5.5レプリケーションは完全に壊れているようです。マスターは常にハングし、スレーブは切断/再接続を続け、古いbinlog_dump接続を残します(show processlistから表示されます)。マスターは、シャットダウンが1時間後に「あきらめる」ときに殺さなければならないまで、シャットダウン時にハングします。最後に、このタイプのエラーが毎日発生します "110423 13:55:48 [エラー]スレーブSQL:テーブルprod.site_iplistでDelete_rowsイベントを実行できませんでした; 'site_iplist'にレコードが見つかりません、Error_code:1032;ハンドラエラーHA_ERR_KEY_NOT_FOUND;イベントのマスターログmysql-bin.000385、end_log_pos 65644796、Error_code:1032 "は、5.5.12で修正されるバグです。

5.0のセットアップが3年間正常に実行されたため、これは非常に残念でした。

とにかく、私は5.1.56(安定した製品に少なくとも56のアップデートがあります)に移行することを考えています。問題は、私のデータベースがすべて5.5になったことです。

5.5マスターと5.1スレーブを持つことは可能ですか?移行プロセスでは、データベースを5.1にインポートしてからレプリケーションを有効にし、同期されたら全員を5.1にフェイルオーバーし、全員が5.1データベースを使用している間に他のすべての5.5サーバーをダウングレードします。

5.5マスター-> 5.1スレーブはまったく機能しますか?もしそうなら、それは現在のMIXEDモードレプリケーションで動作しますか?それをステートメントのみに変更する必要がありますか?

ありがとう!

1
aspitzer

あなたがやろうとしていることは一般的にサポートされていません。 MySQLバージョン間のレプリケーションの互換性 ドキュメントからの引用:

MySQLは、あるメジャーバージョンから次に高いメジャーバージョンへのレプリケーションをサポートしています。たとえば、MySQL4.1を実行しているマスターからMySQL5.0を実行しているスレーブに、MySQL5.0を実行しているマスターからMySQL5.1を実行しているスレーブに複製できます。

そして

新しいマスターから古いスレーブへのレプリケーションは可能かもしれませんが、通常はサポートされていません。

これらのバージョンでは機能する可能性がありますが、推奨される設定にはほど遠いです。私の意見:それをしないでください。

レプリケーションセットアップのアップグレード もお読みください

つまり、MySQL 5.5にアップグレードする場合、マスターを5.5にアップグレードする前に、スレーブはMySQL5.5である必要があります。

(そしておそらくこのスニペットは、5.1に再インポートした場合、直接関連するとは思わないが)

ステートメントベースのレプリケーションから行ベースのレプリケーションに切り替えた後、および最初の行ベースのステートメントがbinlogに書き込まれた後は、レプリケーションセットアップを以前のバージョンにダウングレードすることはできません。

5
Mat

考慮すべきもう1つのことはこれです: 空のバイナリログのサイズ

MySQL 5.5:107バイト
MySQL 5.1:106バイト
MySQL 5.0/4.x/3.x:98バイト

ヘッダー情報が下位バージョンで読み取れる情報を超えてオフセットされているため、上位バージョンから下位バージョンに複製することはできません。

ヘッダー情報は上位バージョンが読み取ることができるものの背後にオフセットされているため、下位バージョンから上位バージョンに複製することが可能です。

3
RolandoMySQLDBA