pt-table-checksumでレプリケーションの整合性を確認する

この記事は最終更新から1年以上経過しています。内容が古くなっている可能性があります。

はじめに

Percona Toolkitにはpt-table-checkusmと呼ばれる、レプリケーションの整合性を確認することができる機能が存在しています。この記事では、pt-table-checkusumを使用して、ソースとレプリカのデータが一致していることを確認していきましょう。

今回は以下のレプリケーション環境で検証を行いました。

OS version MySQL version pt-table-checksum version 備考
CentOS7.9 8.0.33 3.5.2 レプリケーション ソース
CentOS7.9 8.0.33 3.5.2 レプリケーション レプリカ
目次

pt-table-checksumの使い方

pt-table-checksumのインストールと設定方法

Percona Toolkitをダウンロードします。

percona-toolkitをインストールします。

pt-table-checksumログインの簡略化のために設定ファイルを作成し、DSNを追加しておきます。
Percona Toolkitにおける設定ファイルの書き方について詳しくはマニュアルをご確認ください。

DSNを設定ファイルに記載しておくと、pt-table-checksumのオプションを何度も入力する手間が省けます。必須項目ではないので、ご自身の環境に合わせて設定するようにしましょう。

pt-table-checksumを使用するための準備

pt-table-checksum接続ユーザー作成

ソースとレプリカでpt-table-checksumにて接続をするための、共通ユーザーを作成します。

注意点は以下の通りです。

  • 今回はDSNで指定したtestユーザを作成します
  • 同じユーザ名でソース・レプリカ両方に接続できる必要があるため、ホストを’%'(ワイルドカード)としました。
  • 認証プラグインを mysql_native_password で指定していますが、これはCentOS7.8でインストールされるperl-DBD-MySQLのバージョンが古くcaching_sha2_passwordに対応していないためです。
    ※バージョンが比較的新しい場合(例としてperl-DBD-MySQL-4.050-4)はcaching_sha2_passwordに対応しています
  • ユーザには、REPLICATION SLAVE, PROCESS, SUPER, SELECT権限、及びperconaデータベースへのALL権限を付与する必要があります。
    ※ なお、マニュアルでは明示的に必要な権限を記載していません。Percona社のブログ から必要な権限を確認しています。

検証に使用するテーブルの作成

今回検証に使用するデータベース、テーブル、及びレコードを以下のように作成しました。

pt-table-checksum実行前の注意点

現在の設定が binlog_format = ROW or MIXED の場合に pt-table-checksum はエラー終了します。

pt-table-checksum を実行する際にレプリカのbinlog_formatがROWに設定されている場合のリスク喚起が上記のメッセージになります。

--no-check-binlog-format オプションを付けて実行する事でこのチェックを抑止し、ツールを実行することができます。

binlog_format = ROW or MIXED の場合にツールを実行することについては、以下のブログを参考にしてください。

参照先:Caveats With pt-table-checksum Using Row-Based Replication, and Replication Filters
November 22, 2018

pt-table-checksumを実行

準備段階で作成したtestデータベースを指定し、pt-table-checksumを実行します。

pt-table-checksumの出力内容について

出力内容 説明
TS pt-table-checksumがテーブルのチェックサムを終了したときのタイムスタンプ
ERRORS テーブルのチェックサム中に発生したERRORの数とWarningの数
DIFFS レプリカとマスターの1つ以上の異なるチャンク数
ROWS テーブルから選択とチェックサムが計算された行の数
DIFF_ROWS チャンクごとの差異の最大数
CHUNKS テーブルが分割されたチャンクの数
SKIPPED 1 つ以上の問題によりスキップされたチャンクの数
TIME テーブルのチェックサム処理中に経過した時間
TABLE チェックサムが計算されたデータベースとテーブル

この時点ではDIFFS,DIFF_ROWSが0と出力されていることから、差分がないことがわかります。

次に、差分が出力される場合を確認してみましょう。
レプリカでtestテーブルの行を1行削除します。

ソースでpt-table-checksumを実行してみます。

ソースとレプリカで1行分の差分が検出されたことがわかります。

まとめ

レプリケーションをする際にデータの整合性が取れているのかチェックできるツールはとても便利です。
特に、pt-table-checksum接続ユーザー作成時の注意点に関して、自身がつまったポイントをまとめてみましたが、こちらはマニュアルにも記載されていなかったので、ぜひこの記事を参考に皆様がpt-table-checksumを利用しやすくなれば幸いです。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次