pt-table-sync使用说明

pt-table-sync是一个用于高效同步MySQL表数据的工具,确保主从库数据一致。它在主库上执行更改并记录到binlog,然后同步到从库。使用前需备份数据,可通过--print或--dry-run预览变更。示例包括同步数据不一致的表、指定表及多个数据库的同步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用前准备:
 
 
功能:

高效同步mysql表数据。

原理说明:

总是在主上执行数据的更改,再同步到从上,不会直接更改成 从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失. 执行 execute 之前最好先换成--print 或--dry-run 查看一下会变更哪些数据。

参数说明:

参数
说明
--replicate
指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
--databases
指定执行同步的数据库,多个用逗号隔开。
--tables
指定执行同步的表,多个用逗号隔开。
--sync-to-master
指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
h=127.0.0.1
服务器地址,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址。
u=root
帐号。
p=123456 
密码。
--print 
打印,但不执行命令。
--execute
执行命令。

示例一: 若从库的数据比主库的多,pt-table-sync会将从库的数据删除,从而保证主从库数据一致。
从库t1表:
mysql> select * from t1;
+---+------+
| a | b |
+---+------+
| 2 | 1 |
| 5 | 5 |
+---+------+


主库t1表:

mysql> select * from t1;
+---+------+
| a | b |
+---+------+
| 3 | 1 |
| 5 | 5 |
+---+------+

执行语句:pt-table-sync --replicate=test.checksums --databases=test h=192.168.153.132,u=admin,p=123456 h=192.168.153.131,u=admin,p=123456 --print

注:前一个“h”为主库IP,后一个为从库IP,也可以不指定从库IP

打印过程语句:
DELETE FROM `test`.`t1` WHERE `a`='2' LIMIT 1  /*percona-toolkit src_db:test src_tbl:t1 src_dsn:h=192.168.153.132,p=...,u=admin dst_db:test dst_tbl:t1 dst_dsn:h=192.168.153.131,p=...,u=admin lock:1 transaction:1 changing_src:test.checksums replicate:test.checksums bidirectional:0 pid:14452 user:root host:db2*/;
REPLACE INTO `test`.`t1`(`a`, `b`) VALUES ('3', '1') /*percona-toolkit src_db:test src_tbl:t1 src_dsn:h=192.168.153.132,p=...,u=admin dst_db:test dst_tbl:t1 dst_dsn:h=192.168.153.131,p=...,u=admin lock:1 transaction:1 changing_src:test.checksums replicate:test.checksums bidirectional:0 pid:14452 user:root host:db2*/;

说明:从打印出来的语句,可以知道,做了两件事情,一个是更新不存在的记录,另一人是删除主库中没有而从库中有的记录,从而确保主从库数据一致性。所有操作在主库上生成,并写到binlog日志中,再同步到从库中执行。

 
示例二:同步指定的表

pt-table-sync --replicate=test.checksums --databases=test h=192.168.153.132,u=admin,p=123456 --print --tables=test.t6
主库t6表数据:
mysql> select * from t6;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
+---+------+

从库t6表数据:
mysql> select * from t6;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
| 2 | 2 |
+---+------+

打印执行过程语句:
DELETE FROM `test`.`t6` WHERE `b`='2' LIMIT 1 /*percona-toolkit src_db:test src_tbl:t6 src_dsn:h=192.168.153.132,p=...,u=admin dst_db:test dst_tbl:t6 dst_dsn:h=192.168.153.131,p=...,u=admin lock:1 transaction:1 changing_src:test.checksums replicate:test.checksums bidirectional:0 pid:26964 user:root host:db2*/;

需要将从库中b=2的数据删除。

执行数据同步一致命令:

pt-table-sync --replicate=test.checksums --databases=test h=192.168.153.132,u=admin,p=123456 --execute --tables=test.t6  //将"--print"修改成"--execute"

执行后结果:
主库t6表数据:
mysql> select * from t6;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
+---+------+

从库t6表数据:
mysql> select * from t6;
+---+------+
| a | b |
+---+------+
| 1 | 1 |
+---+------+

示例三:指定多个数据库

pt-table-sync --replicate=test.checksums --databases=test,db_test h=192.168.153.132,u=admin,p=123456 --print

具体不在说明,可以查看如下截图。

 
注:使用 --replicate=test.checksums时需要注意, test.checksums仅仅记录上次执行比较后的表数据,若下次需要重新执行。pt-table-sync  通过checksums表中的数据进行判断表的数据是否一致,若数据未更新,仅仅只会重新同步之前判断的内容。

 pt-table-checksum --nocheck-replication-filters --databases=test,db_test --replicate=test.checksums --host=192.168.153.132 --user=admin --password=123456 --port=3306 --no-check-binlog-format

使用pt-table-sync时需要注意:

1.  checksums需要在同步库中。

2. 进行数据同步的表需要有主键或唯一索引,否则将报如下错误:

[root@db2 percona-toolkit-2.2.6]# pt-table-sync --replicate=test.checksums --databases=test,db_test h=192.168.153.132,u=admin,p=123456 --execute
Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10666. while doing test.t2 on 192.168.153.131
Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10666. while doing test.t9 on 192.168.153.131

说明:--sync-to-master没有进行详细测试,其与--replicate=test.checksums区别在于它会show processlist或show slave status 去自动的找主。

[root@db2 percona-toolkit-2.2.6]# pt-table-sync --sync-to-master --databases=test,db_test h=192.168.153.132,u=admin,p=123456 --print

 The server specified as a master has no connected slaves at /usr/local/bin/pt-table-sync line 6835.  //权限可能有问题,目前暂不做测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值