2017-09-07 10 views
1

私はMariaDBを持つ単純なマスター - >スレーブを設定しているを検出していません:PT-テーブル・チェックサムは差分

マスター:MariaDB 10.2.8とperconaツールキット3.0.4

スレーブとのUbuntu 16.04 LTS: Ubuntu 16.04 LTS with MariaDB 10.2.7

レプリケーションがうまくいきました。データがマスターとスレーブ間で同じかどうかを確認したいと思います。

私はマスターにpercona-ツールキットをインストールして、チェックサムのユーザが作成した:それはマスターに自分自身を提示するように、私はまた、スレーブのconfにreport_hostを追加

MariaDB> GRANT REPLICATION SLAVE,PROCESS,SUPER, SELECT ON *.* TO `pt_checksum`@'%' IDENTIFIED BY 'password'; 
MariaDB> GRANT ALL PRIVILEGES ON percona.* TO `pt_checksum`@'%'; 
MariaDB> FLUSH PRIVILEGES; 

を:

MariaDB [(none)]> show slave hosts; 
+-----------+-----------+------+-----------+ 
| Server_id | Host  | Port | Master_id | 
+-----------+-----------+------+-----------+ 
|   2 | 10.0.0.49 | 3306 |   1 | 
+-----------+-----------+------+-----------+ 
1 row in set (0.00 sec) 

pt-table-checksumをテストするために、スレーブのテストデータベースのTicketsテーブルからローを削除しました。私はこの行が本当に失われているが、マスターにまだ存在していることを確認しました。

しかしPT-テーブルチェックサムは、この違いを報告しません:

# pt-table-checksum --databases=shop_test --tables=Tickets --host=localhost --user=pt_checksum --password=... --no-check-binlog-format --no-check-replication-filters 
     TS ERRORS DIFFS  ROWS CHUNKS SKIPPED TIME TABLE 
09-07T16:15:02  0  0  14  1  0 0.013 shop_test.Tickets 

だから私は、私の環境でPTDEBUG = 1を設定し、マスターがスレーブに罰金接続されているようです。不足している行が検出されない理由として、

# MasterSlave:5175 9725 Connected to h=localhost,p=...,u=pt_checksum 
# MasterSlave:5184 9725 SELECT @@SERVER_ID 
# MasterSlave:5186 9725 Working on server ID 1 
# MasterSlave:5219 9725 Looking for slaves on h=localhost,p=...,u=pt_checksum using methods processlist hosts 
# MasterSlave:5226 9725 Finding slaves with _find_slaves_by_processlist 
# MasterSlave:5288 9725 DBI::db=HASH(0x31c5190) SHOW GRANTS FOR CURRENT_USER() 
# MasterSlave:5318 9725 DBI::db=HASH(0x31c5190) SHOW FULL PROCESSLIST 
# DSNParser:1417 9725 Parsing h=10.0.0.49 
[...] 
# MasterSlave:5231 9725 Found 1 slaves 
# MasterSlave:5208 9725 Recursing from h=localhost,p=...,u=pt_checksum to h=10.0.0.49,p=...,u=pt_checksum 
# MasterSlave:5155 9725 Recursion methods: processlist hosts 
[...] 
# MasterSlave:5175 9725 Connected to h=10.0.0.49,p=...,u=pt_checksum 
# MasterSlave:5184 9725 SELECT @@SERVER_ID 
# MasterSlave:5186 9725 Working on server ID 2 
# MasterSlave:5097 9725 Found slave: h=10.0.0.49,p=...,u=pt_checksum 
[...] 
# pt_table_checksum:9793 9725 Exit status 0 oktorun 1 
# Cxn:3764 9725 Destroying cxn 
# Cxn:3774 9725 DBI::db=HASH(0x31cd218) Disconnecting dbh on slaveserver h=10.0.0.49 
# Cxn:3764 9725 Destroying cxn 
# Cxn:3774 9725 DBI::db=HASH(0x31c5190) Disconnecting dbh on masterserver h=localhost 

私はアイデアを午前:私は出力からの関連ビットを取り出すしようとしましたか?

答えて

0

私は週末に新しいバグレポートに気付きました。私はこれが実際に私が経験している問題であることを今日確認しました。

回避方法は、--set-vars binlog_format=statementを追加することです。

このオプションを設定すると、2回目の実行後にその差異が明らかになります。スレーブ変化の最初の実行のチェックサムテーブルの間に

MariaDB [percona]> select tbl, this_crc, this_cnt, master_crc,master_cnt from checksums where tbl = 'Tickets' and db = 'shop_test'; 
+---------+----------+----------+------------+------------+ 
| tbl  | this_crc | this_cnt | master_crc | master_cnt | 
+---------+----------+----------+------------+------------+ 
| Tickets | f30abebe |  14 | f30abebe |   14 | 
+---------+----------+----------+------------+------------+ 

...へ...

MariaDB [percona]> select tbl, this_crc, this_cnt, master_crc,master_cnt from checksums where tbl = 'Tickets' and db = 'shop_test'; 
+---------+----------+----------+------------+------------+ 
| tbl  | this_crc | this_cnt | master_crc | master_cnt | 
+---------+----------+----------+------------+------------+ 
| Tickets | 284ec207 |  13 | f30abebe |   14 | 
+---------+----------+----------+------------+------------+ 

そしてセカンドランの後、diffはまた、中に存在していますPT-チェックサム・テーブル出力:

# pt-table-checksum --tables=shop_test.Tickets --host=localhost --user=pt_checksum --password=... --no-check-binlog-format --no-check-replication-filters --set-vars binlog_format=statement 
      TS ERRORS DIFFS  ROWS CHUNKS SKIPPED TIME TABLE 
09-11T11:17:37  0  1  14  1  0 0.022 shop_test.Tickets 

私はbinlog_formatはまだ 'MIXED' であることをSHOW VARIABLES LIKE 'binlog_format'でチェックし、セッションの期間だけ変更されることは明らかです。ドキュメントのによると、これは私が理解限り、自動的に行われる必要があります。

これは の期間STATEMENTにビンログ形式を切り替えますステートメントベースレプリケーション(PT-テーブルチェックサム でのみ動作しますサーバーが行ベースの複製を使用する場合はセッション)。

バグレポート: https://bugs.launchpad.net/percona-toolkit/+bug/1715801