pt-table-checksum使用总结

1、pt-table-checksum概述

    pt-table-checksum是Percona-Toolkit工具集中的一个组件,是一个检查主从复制一致性的工具,通过在主库上执行检查语句可以在线检查MySQL主从数据的一致性。它通过指定选项连接指定服务器实例,可以通过指定条件过滤库级别或表级别,每次检查一张表,所以不需要大量的内存和多余操作。即使是非常大的表也可以运行良好,这主要是因为pt-table-checksum可以将表划分为多个chunk,根据checksum query运行的时间来调整chunk的大小,减少了pt-table-checksum运行对主从复制延迟和主机负载的影响。为了保证对数据库主机运行尽可能少的影响,pt-table-checksum会自动探测从库并连接,如果连接失败,可以通过选项--recursion-method选定从库连接方式。

2、pt-table-checksum使用方法

语法:pt-table-checksum [OPTIONS] [DSN]

2.1  OPTIONS参数

--ask-pass:命令行提示密码输入,保护密码安全,需提前安装模块perl-TermReadKey。

--[no]check-binlog-format:默认值yes,检查所有服务器上的binlog_format系统参数是否相同。

--check-interval:默认值1s,检测因为“--max-lag”检查之间的休眠时间。

--[no]check-replication-filters:默认值yes,检测主从复制是否设置了过滤器,默认如果设置了过滤,则此工具不进行校验操作。

--check-slave-lag:主从复制延迟大于“--max-lag”指定的值之后停止校验,默认情况下,会检查所有的从库,但是该选项可以指定特定从库(通过DSN)。

--chunk-index:选择使用哪个索引对表进行chunk分块操作,默认情况下会选择最优的索引,使用force index可以指定索引。

--chunk-size:默认值1000,指定chunk大小,每个chunk需要校验的行数,单位可以为k、m或者g。使用这个参数后,该工具就不会动态的调整chunk的大小,以便chunk的校验在--chunk-time规定的时间内完成。大多数情况下不使用该参数,而是用--chunk-time。

--chunk-size-limit:默认值2,指定chunk的行数最多可以超过--chunk-size规定行数的多少倍,最小值为1倍,即不超过--chunk-size规定的行数。由于行数是由explain估算的,可能与实际行数不相等,因此不建议设置为1。当参数值为0时,则不会检查是否超过指定的行数。

--chunk-time:默认值0.5,动态调整chunk的大小使得cunk内的行数可以在指定的时间执行完。如果设置为0,就不会动态调整chunk的大小,这样每次校验的时间会不同,但chunk大小是一样的。

--columns,-c:指定需要校验的字段,多个字段之间用“,”隔开,该选项一般只对校验一张表时有效,除非多张表拥有相同的字段。

--[no]create-replicate-table:默认值yes,创建参数“--replicate”指定的库和表,表结构与参数“--replicate”指定的结构相同。

--replicate:默认值percona.checksums,保存校验结果的表,表结构如下:

CREATE TABLE checksums (
   db             CHAR(64)     NOT NULL,
   tbl            CHAR(64)     NOT NULL,
   chunk          INT          NOT NULL,
   chunk_time     FLOAT            NULL,
   chunk_index    VARCHAR(200)     NULL,
   lower_boundary TEXT             NULL,
   upper_boundary TEXT             NULL,
   this_crc       CHAR(40)     NOT NULL,
   this_cnt       INT          NOT NULL,
   master_crc     CHAR(40)         NULL,
   master_cnt     INT              NULL,
   ts             TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (db, tbl, chunk),
   INDEX ts_db_tbl (ts, db, tbl)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

注意: lower_boundary and upper_boundary的数据类型可以是BLOB。因为选项“--[no]create-replicate-table”默认值为true,所以默认情况下,如果数据库和表之前不存在,则会自动创建percona库和checksums表。除非另有选项指定。选项“--replicate”指定的表不会进行校验操作,指定的表默认加入选项“--ignore-tables”。

--[no]replicate-check:默认值yes,在校验完每张表之后检查主从是否一致。该工具通过在从服务器上执行一个简单的select语句,将查询校验结果与主库的查询校验结果进行比较,然后把差异结果显示在输出的DIFF字段中。

--replicate-check-only:该参数规定仅检查数据是否一致,但不进行校验操作,而是通过之前的校验加过进行查询,通常与参数“--[no]replicate-check”一起使用。

--replicate-check-retries:默认值1,当主从数据不一致时,进行重复校验的次数。

--replicate-database:指定进行数据校验时,在哪个库下执行,相当于use DB_NAME。

--resume:指定从最后完成校验的chunk恢复校验。

--retries:默认值2,如果没有严重错误(如lock wait timeout or the query being killed),指定重复校验chunk的次数。

--run-time:指定校验运行时间,默认校验完所有的表。

--set-vars:进行校验时指定参数,多个参数用“,”隔开。

--socket -S:指定socket文件。

--tables -t:指定需要校验哪些表,多个表之间用“,”隔开。

--databases -d:指定需要校验哪些库,多个库之间用“,”隔开。

--host,-h:指定连接的数据库IP地址。

--port,-P:指定连接的数据库Port端口。

--user,-u:指定连接的数据库用户。

--password,-p:指定连接的数据库用户密码。

--progress:打印工具执行过程的进度提示到STDERR。选项值有两部分组成,用逗号进行分隔,第一部分为百分比,时间和迭代。第二部分为根据第一部分数据更新频率,也分为百分比,时间和迭代。

--quiet,-q:不打印工具执行过程的信息到STDOUT(禁用'--progress')。但错误和警告还是打印到STDERR。

--recurse:指定递归搜寻从库的层级,默认无限级。

--recursion-method:默认值包括processlist、hosts,指定获取从库的方式。该工具在校验期间会多次执行“REPLICA CHECKS”。如果没有获取到从库,可以换一种recursion method,或者使用dsn指定需要校验的从库。

METHOD       USES
===========  =============================================
processlist  SHOW PROCESSLIST
hosts        SHOW SLAVE HOSTS
cluster      SHOW STATUS LIKE 'wsrep\_incoming\_addresses'
dsn=DSN      DSNs from a table
none         Do not find slaves

processlist:通过SHOW PROCESSLIST方式找到slave,为默认方式,因为SHOW SLAVE HOSTS不可靠。一旦实例运行在非3306端口上时,hosts方式就会变为默认方式。

hosts:通过SHOW SLAVE HOSTS方式找到slave,hosts方式要求从库配置“--report_host”和“--report_port”这两个参数。

cluster:基于集群版本Galera 23.7.3及更新版本,例如Percona XtraDB Cluster versions 5.5.29 and above。

dsn:这种方法指定表dsns存放从库的信息("h=replica_host,u=repl_user,p=repl_pass"),该工具只会对表中的从库进行校验。dsns表结构如下:

CREATE TABLE `dsns` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `dsn` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

2.2 DSN选项

    dsn选项为“optipn=value”的格式,这些选项区分大小写,等号前后不能有空格,如果出现空格,必须加引号,多个选项之间用“,”分开。

  • A
    指定字符集
  • D
    指定DSN表所在数据库
  • t
    指定DSN表
  • h
    指定要连接的HOST
  • P
    指定要连接的PORT
  • S
    指定连接所使用的SOCKET文件(Unix systems)
  • u
    指定连接的用户名
  • p
    指定连接的用户名密码

示例:
h=192.168.58.3,P=3306,D=employees,t=employees

2.3 使用案例

 

#在主库上创建percona_schema库和dsns表,插入从库的host,port,user,passwd
> create database if not exists percona_schema;
> use percona_schema;
> CREATE TABLE if not exists dsns (
    -> id int(11) NOT NULL AUTO_INCREMENT,
    -> parent_id int(11) DEFAULT NULL,
    -> dsn varchar(255) NOT NULL,
    -> PRIMARY KEY (id)
    -> );

> show tables;
> desc dsns;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| parent_id | int(11)      | YES  |     | NULL    |                |
| dsn       | varchar(255) | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

#将从库的dsn信息写入dsns表
> insert into percona_schema.dsns(dsn) VALUES ("h=10.192.168.52,P=3306,u=checksum,p=123456");
> select * from percona_schema.dsns;

#校验单表
pt-table-checksum h=10.192.168.51,u=checksum,p='123456',P=3306  --tables=test.t1 --replicate=percona_schema.checksums --no-check-binlog-format --nocheck-replication-filters --recursion-method dsn=t=percona_schema.dsns,h=10.192.168.52,u=checksum,p='123456',P=3306

#校验全库
pt-table-checksum h=10.192.168.51,u=checksum,p='123456',P=3306 --databases=test --replicate=percona_schema.checksums --nocheck-replication-filters --no-check-binlog-format  --chunk-size-limit=2000 --recursion-method dsn=t=percona_schema.dsns,h=10.192.168.52,u=checksum,p='123456',P=3306

说明:
-chunk-size-limit=2000(无索引的大表需要使用)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jkroiiy2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值