標準以外のポートを使用して奴隷を備えたPT-Table-Checksum
-
16-10-2019 - |
質問
PT-Table-Checksumを実行して、MySQLレプリケーションでスレーブドリフトを検出しようとしています。私の奴隷は標準のTCPリスニングポートを使用していないので、ツールを実行するとエラーが発生します。
Cannot connect to P=3306,h=,p=...
それはまだマスターのテーブルをチェックサムしていますが、奴隷に接続することができずにそれはあまり役に立たない。コマンドを実行するときに、奴隷の代替ポートを指定する方法を理解できません。私の現在のコマンドは次のように見えます
pt-table-checksum -h -P 3388 -p
解決
問題は、レプリカがポートをマスターに報告しないことです。デフォルトでは、PT-Table-Checksumは、不明をデフォルトで入力することで接続しようとします。未知のものがデフォルトを使用していない場合、これは失敗します。この場合、2つのオプションがあります。
1)-Recursion-Methodオプションを使用して、Show ProcessListの検査からショースレーブホストの検査に変更し、奴隷を設定してホストを報告します。私はこれをお勧めしません。
2)代わりに、Recursion-Method = DSNを使用し、各レプリカへの接続方法をツールに伝えるDSN(データソース名)の命令でいっぱいのテーブルを作成することをお勧めします。このテーブルがfoo.barの場合、使用します-recursion-method = dsn = d = foo、t = barを使用します。
これは2.0シリーズのツールキットでのみ利用可能ですが、PT-Table-Checksumは2.0で大幅に改善されるため、とにかくそれを使用する必要があります。
他のヒント
Perconaツールは、標準のMySQLクライアントの引数を取得していません。その形式でDSNを指定する必要があります。見る http://www.percona.com/doc/percona-toolkit/2.0/pt-table-checksum.html#dsn-options
あなたは次のようなものが欲しいでしょう
pt-table-checksum h=myhost,u=user,p=pass,P=port
個人的には、プロセスリストに表示されるものに資格情報を入れるのは好きではありません。
pt-table-checksum --defaults-file=/path/to/my.cnf h=myhost,P=port
my.cnfがどのように見えるか
[client]
user=usernameXYZ
password=asdf234JKL
これを奴隷に複製したい場合は、 - 複製 チェックサムを入れるテーブルを指示するオプション(そして、その結果、それぞれの奴隷に奴隷の価値を置く)。これが初めてである場合は、あなたのためにそのテーブルを作成してもらいたいかもしれません -Create-Replicate-Table.
遅れをとるために奴隷を監視したい場合を除き、奴隷に直接接続する必要はありません。基本的にはクエリを発行します
Checksumstablesに置き換えます...(masterv1、masterv2、(select blah ...))
ここで、文字通りのマスター値は、交換の選択部分に沿ってビンログに書き込まれます。それが奴隷で実行されるとき、セレクトは奴隷のチェックサムを取得すると考えています。
私は最近このツールで多くの時間を費やしたので、それから始めて、あなたが助けたより具体的な問題で返信しますので、私はマニュアル全体と間違っている可能性のあるものをすべて書き直すだけではありません。
注:実行する場合
export PTDEBUG=1
Perconaスクリプトの前に、何が間違っているのかを示すのに役立つデバッグ情報がたくさんあります。また、これらはすべてPerlスクリプトであることを忘れないでください。そうすれば、ソースを自分で検査して(おそらく)何が問題なのかを確認できます。