ホームページ  >  記事  >  データベース  >  pt-table-checksum 検証と pt-table-sync 修復データ

pt-table-checksum 検証と pt-table-sync 修復データ

巴扎黑
巴扎黑オリジナル
2017-06-23 15:06:091474ブラウズ
1
sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum list | grep percona-toolkit
次に、
percona-toolkit.noarch 3.0.0-rc percona-release-noarch
をインストールします。 (2) インストールパッケージを解凍します:
sudo yum install percona-toolkit
ここまでで、以下は主にテストするためのものです。 pt-table-checksum 検証と pt-table-sync は主にマスターとスレーブが一致しているかどうかを検証するために使用され、後者は主にデータを修復するために使用されます。不一致。

pt-table-checksum は、マスターとスレーブのデータの整合性を検証するために Percona が提供するツールで、マスター ライブラリを指し、不整合がキャプチャされた場合にスレーブ ライブラリの結果セットを判断してフィードバックします。 、ゼロ以外の結果を返します。ただし、データの問題を修復したい場合は、pt-table-sync を使用する必要があります。
pt-table-checksum は、実行時のステートメントのコピー形式に基づいています。ROW 形式の場合は、実行時に --no-check-binlog-format パラメーターを追加する必要があります。

3: pt-table-checksum の実践。インストール後に直接使用できます。私は 2 番目の方法を使用しています
[root@localhost home]# cd toolkit/[root@localhost toolkit]# ls
percona-toolkit-2.2.19.tar.gz[root@localhost toolkit]# tar -xvf percona-toolkit.tar.gz

特定のライブラリを個別にチェックすることもできます。検査:

[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T10:55:49 0 0 1 1 0 1.331 MAXIANGQIAN.MAXIANGQIAN06-07T10:55:54 0 0 1 1 0 5.524 maxiangqian.test06-07T10:55:56 0 0 4 1 0 1.208 maxiangqian.test0106-07T10:55:57 0 0 0 1 0 1.164 mysql.columns_priv06-07T10:55:58 0 0 5 1 0 1.216 mysql.db06-07T10:55:59 0 0 2 1 0 1.176 mysql.engine_cost06-07T10:56:00 0 0 0 1 0 1.178 mysql.event06-07T10:56:01 0 0 0 1 0 1.160 mysql.func06-07T10:56:03 0 0 1 1 0 1.154 mysql.gtid_executed06-07T10:56:08 0 0 40 4 0 5.015 mysql.help_category06-07T10:56:13 0 0 679 5 0 5.806 mysql.help_keyword06-07T10:56:18 0 0 1334 4 0 4.572 mysql.help_relation06-07T10:56:19 0 0 635 1 0 1.169 mysql.help_topic06-07T10:56:20 0 0 0 1 0 1.163 mysql.ndb_binlog_index06-07T10:56:22 0 0 0 1 0 1.157 mysql.plugin06-07T10:56:23 0 1 48 1 0 1.236 mysql.proc06-07T10:56:24 0 0 0 1 0 1.197 mysql.procs_priv06-07T10:56:25 0 0 1 1 0 1.235 mysql.proxies_priv06-07T10:56:26 0 0 6 1 0 1.188 mysql.server_cost06-07T10:56:28 0 0 0 1 0 1.154 mysql.servers06-07T10:56:34 0 0 1 1 0 6.184 mysql.tables_priv06-07T10:56:35 0 0 0 1 0 1.198 mysql.time_zone06-07T10:56:36 0 0 0 1 0 1.121 mysql.time_zone_leap_second06-07T10:56:37 0 0 0 1 0 1.148 mysql.time_zone_name06-07T10:56:38 0 0 0 1 0 1.147 mysql.time_zone_transition06-07T10:56:40 0 0 0 1 0 1.138 mysql.time_zone_transition_type06-07T10:56:41 0 0 8 1 0 1.336 mysql.user06-07T10:56:42 0 0 0 1 0 1.164 open_api.ma06-07T10:57:01 0 0 1000000 13 0 18.707 sbtest.sbtest06-07T10:57:02 0 0 6 1 0 1.263 sys.sys_config

得られた結果は上記の通りです。説明をご覧ください:

TS: 検査が完了した時刻。 ERRORS: チェック中に発生したエラーと警告の数。 DIFFS: 0 は一貫性があることを意味し、1 は一貫性がないことを意味します。 --no-replicate-check を指定した場合は常に 0 となります。 --replicate-check-only を指定した場合は、異なる情報が表示されます。 ROWS: テーブル内の行数。 CHUNKS: テーブルに分割されたブロックの数。 SKIPPED: エラーや警告、または大きすぎるためにスキップするブロックの数。 TIME: 実行時間。 TABLE: チェックされるテーブルの名前。
次に、このメインパラメータを見てください:
[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306
--replicate=rep_test.checksums パラメータを指定すると、データベースが自動的に生成され、チェック情報がチェックサムテーブルに書き込まれます。
SLAVE の対応するライブラリに入り、チェックサム テーブルの情報を表示できます。

--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。--replicate-check-only :只显示不同步的信息。 --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。 --databases= :指定需要被检查的数据库,多个则用逗号隔开。--tables= :指定需要被检查的表,多个用逗号隔开 h=127.0.0.1 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
上記の this_crc <> を通して、不一致を確認できます。チャンクを確認すると、このテーブルのどのブロックに矛盾したレコードがあるかを知ることができます。

4: データの不整合を検出し、pt-table-sync を使用して修復します
前のセクションを見てみましょう: 次のステートメントによってデータの不整合が検出されました:
mysql> select * from checksums where this_cnt<>master_cnt;

Restore inconsistent data :

[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T11:13:18 0 0 1 1 0 1.220 MAXIANGQIAN.MAXIANGQIAN06-07T11:13:19 0 1 1 1 0 1.135 maxiangqian.test06-07T11:13:21 0 0 4 1 0 1.197 maxiangqian.test01
自体、テストテーブルのデータが 1 行欠落しています。実行後、本体とコピーのデータは一致します:
次に、pt の使用例をいくつか見てみましょう。 -table-sync:

(1) host1 のデータを host2 に同期し、db.tbl テーブルのみを同期します
[root@localhost bin]# clear[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print[root@localhost bin]# /home/toolkit/percona-toolkit-2.2.19/bin/pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --no-check-binlog-format --databases=maxiangqian h=172.16.16.35,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE06-07T11:18:09 0 0 1 1 0 1.172 MAXIANGQIAN.MAXIANGQIAN06-07T11:18:10 0 0 1 1 0 1.144 maxiangqian.test06-07T11:18:11 0 0 4 1 0 1.282 maxiangqian.test01
(2) host1 のすべてのデータを host2 および host3 に同期します
pt-table-sync --execute h=host1,D=db,t=tbl h=host2[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print

(3) スレーブ 1 上のすべてのデータがメイン データベースと同期されていることを確認します

pt-table-sync --execute host1 host2 host3[root@localhost bin]# ./pt-table-sync --execute h=172.16.16.35,P=3306,D=maxiangqian,t=test,u=root,p=123456 h=172.16.16.34,P=3306,u=root,p=123456 h=172.16.16.35,P=3307,u=root,p=123456 --no-check-slave --print
この要件では、チェックされるテーブルに主キーまたは一意のインデックスが必要です。次のように単一データベースの単一テーブルを指定することもできます
pt-table-sync --execute --sync-to-master slave1[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,u=root,p=123456 --no-check-slave --print
(4) チェック

[root@localhost bin]# ./pt-table-sync --execute --sync-to-master h=172.16.16.34,P=3306,D=maxiangqian,t=test01,u=root,p=123456 --no-check-slave --print
によって生成された rep_test.checksums に従ってすべてのスレーブ データベースを復元します。これは次の例です。 :

pt-table-sync --execute --replicate test.checksum master1
(5) スレーブ 1 のデータのみを修復します

[root@localhost bin]# ./pt-table-sync --execute --replicate rep_test.checksums h=172.16.16.35,P=3306,u=root,p=123456
(6) デュアルマスターモード マスター 2 は自身のデータを修復します:

/pt-table-sync --execute --replicate rep_test.checksums --sync-to-master slave1
デュアルマスターモードのため、多くのデータが修復されます問題が発生すると、変更が別のデータベースに渡される可能性があるため、デュアルマスター モードでは次の操作を実行しないでください:

pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl

以上がpt-table-checksum 検証と pt-table-sync 修復データの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。