1
2
|
[root@master ~] yum -y
install
perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL
[root@master ~] rpm -ivh percona-toolkit-2.2.13-1.noarch.rpm
|
1
2
3
4
5
6
7
8
|
mysql> GRANT
select
,insert,update,delete,create,process,super,replication slave ON *.* TO monitor@
'192.168.0.%'
IDENTIFIED BY
'111111'
;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT
select
,insert,update,delete,create,process,super,replication slave ON *.* TO monitor@
'127.0.0.1'
IDENTIFIED BY
'111111'
;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
|
1
2
3
4
5
6
7
8
9
10
11
|
mysql> SELECT * FROM mydb1.tb1;
+----+-------+------+
|
id
| name | age |
+----+-------+------+
| 1 | tom | 12 |
| 2 | jem | 23 |
| 3 | jason | 29 |
| 4 | aaa | 30 |
| 5 | b | 69 |
+----+-------+------+
5 rows
in
set
(0.01 sec)
|
1
2
3
4
5
6
7
8
9
10
11
|
mysql>
select
* from mydb1.tb1;
+----+-------+------+
|
id
| name | age |
+----+-------+------+
| 1 | tom | 12 |
| 2 | jem | 23 |
| 3 | jason | 29 |
| 4 | aaa | 30 |
| 5 | b | 69 |
+----+-------+------+
5 rows
in
set
(0.00 sec)
|
1
2
3
|
[root@master ~]
# pt-table-checksum --nocheck-replication-filters --replicate=mydb1.checksums --databases=mydb1 h=127.0.0.1,u=monitor,p=111111
Replica slave has binlog_format ROW
which
could cause pt-table-checksum to
break
replication. Please
read
"Replicas using row-based replication"
in
the LIMITATIONS section of the tool's documentation. If you understand the risks, specify --no-check-binlog-
format
to disable this check.
#報錯了,由於個人mysql環境的二進制日誌是基於行的,即‘binlog_format=ROW’,若是是基於行的複製環境,percona官方是不建議使用pt-table-checksum工具來進行數據的一致性檢查的,但它又提供了一個選項來跳過此檢查。
|
1
2
3
4
5
|
[root@master ~]
# pt-table-checksum --nocheck-replication-filters --replicate=mydb1.checksums --no-check-binlog-format --databases=mydb1 --h=127.0.0.1,u=monitor,p=111111
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
04-21T18:00:59 0 0 5 1 0 0.280 mydb1.tb1
04-21T18:00:59 0 0 2 1 0 0.331 mydb1.tb2
#注意觀察「DIFFS」那一列,若是數據有不一致的這裏不是「0」值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql> update mydb1.tb1
set
age=20 where
id
=5;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
select
* from mydb1.tb1;
+----+-------+------+
|
id
| name | age |
+----+-------+------+
| 1 | tom | 12 |
| 2 | jem | 23 |
| 3 | jason | 29 |
| 4 | aaa | 30 |
| 5 | b | 20 |
+----+-------+------+
5 rows
in
set
(0.00 sec)
|
1
2
3
4
5
|
[root@master ~]
# pt-table-checksum --nocheck-replication-filters --replicate=mydb1.checksums --no-check-binlog-format --recursion-method=hosts --databases=mydb1 h=127.0.0.1,u=monitor,p=111111
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
04-21T18:27:00 0 1 5 1 0 0.307 mydb1.tb1
04-21T18:27:01 0 0 2 1 0 0.048 mydb1.tb2
#tb1這個表的"DIFFS"的值變爲了「1」。
|
1
2
3
4
|
[root@master ~]
# pt-table-sync --replicate=mydb1.checksums h=127.0.0.1,u=monitor,p=111111 h=192.168.0.202,u=monitor,p=111111 --charset=utf8 --print
REPLACE INTO `mydb1`.`tb1`(`
id
`, `name`, `age`) VALUES (
'5'
,
'b'
,
'69'
) /*percona-toolkit src_db:mydb1 src_tbl:tb1 src_dsn:A=utf8,h=127.0.0.1,p=...,u=monitor dst_db:mydb1 dst_tbl:tb1 dst_dsn:A=utf8,h=192.168.0.202,p=...,u=monitor lock:1 transaction:1 changing_src:mydb1.checksums replicate:mydb1.checksums bidirectional:0 pid:3205 user:root host:master*/;
#上邊的輸出信息表示從庫上id=5那行的age的值應該是69。
#命令中有兩組「h= ,u= ,p= 」,第一組指定的是主服務器,第二組指向從服務器。
|
1
|
[root@master ~]
# pt-table-sync --replicate=mydb1.checksums h=127.0.0.1,u=monitor,p=111111 h=192.168.0.202,u=monitor,p=111111 --charset=utf8 --execute
|
1
2
3
4
|
[root@master ~]
# pt-table-checksum --replicate=mydb1.checksums --nocheck-replication-filters --no-check-binlog-format --databases=mydb1 h=127.0.0.1,u=monitor,p=111111
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
04-21T21:42:31 0 0 5 1 0 0.309 mydb1.tb1
04-21T21:42:32 0 0 2 1 0 0.304 mydb1.tb2
|