web-dev-qa-db-ja.com

pt-table-checksumおよび行ベースのレプリケーション

私が使用するセットアップは、マスタースレーブレプリケーション構成のMySQL 5.5ですが、それを必要とするアプリケーションを使用するため、「MIXED」レプリケーション(ステートメントおよび行ベース)を使用する必要があります。サーバ。

最近レプリケーションを停止しましたが、適切に回復したことを確認したいと思います。

Percona Toolkitをダウンロードしてインストールしましたが、この場合、特に行ベースのレプリケーションのため、pt-table-checksumを使用できないようです。

2.27.5制限行ベースのレプリケーションpt-table-checksumを使用するレプリカはステートメントベースのレプリケーションを必要とし、マスターにbinlog_format = STATEMENTを設定しますが、 MySQLの制限により、レプリカはこの変更を受け入れません。したがって、チェックサムは、他のレプリカのマスターである行ベースのレプリケーションを使用するレプリカを超えてレプリケートしません。このツールは、すべてのサーバーのbinlog_formatを自動的にチェックします。 -[no] check-binlog-formatを参照してください。バグ899415)

行ベースのレプリケーションテーブルでチェックサムを実行するための他のオプションはありますか?

私はこれを発見しました Perconaフォーラムで これはが機能することを示していますが機能しますが、cnfファイルを変更することはできません。また、実行しようとすると、次の警告が表示されます。

レプリカmysql-b.example.comにはbinlog_format MIXEDがあり、これによりpt-table-checksumがレプリケーションを中断する可能性があります。ツールのドキュメントの「制限」セクションにある「行ベースのレプリケーションを使用したレプリカ」をお読みください。リスクを理解している場合は、-no-check-binlog-formatを指定してこのチェックを無効にします。

4
dgig

MIXEDMIXED- basedと等しいため、アプリケーションがSTATEMENTレプリケーション形式を必要とする理由がわかりませんが、実行時にROW形式に変更されます安全でない」クエリ。したがって、MIXED互換のアプリケーションは、STATEMENTROWの両方と互換性があるはずです。

here を見るとわかるように、検出された形式(サーバー側)がROWまたはMIXEDの場合、セッションのみ動的に変更しようとします。あなたの場合、スレーブの1つについて不平を言う hereSUPER特権が必要です)。

3ノードチェーンレプリケーションがない場合、またはスレーブのバイナリログを使用する場合は、--no-check-binlog-formatで警告を無視できます。 my.cnfを変更する必要はありません。問題は、セッションのみのステートメントへの変更が「MIXEDを必要とするアプリケーション」に影響するかどうかです。 pt-table-checksumは、ハッシュをマスターとスレーブで独立して同期して(時間内ではなく、他のクエリとの関係で)計算する必要があるため、ステートメントとして独自の計算を行う必要があります。

4
jynus