运行环境:
Master:10.168.1.216
Slave:10.168.1.217
一、pt-heartbeat
监控mysql复制延迟
1.1、创建一个后台进程定期更新主上的test库的heartbeat表()默认是1s,可以--interval指定,执行后会成一个heartbeat表,ismarthome库为我监控的同步库
pt-heartbeat -D ismarthome --update --user=root --password=123456 -h10.168.1.216 --create-table –daemonize
1.2、监控复制在slave上的落后程度(会一直监控)
pt-heartbeat -D ismarthome --monitor --user=root --password=daqi-123456 -h10.168.1.217
1.3、监控复制在slave上的落后程度(监控一次退出)
pt-heartbeat -D ismarthome --check --user=root --password=daqi-123456 -h10.168.1.217
二、 pt-slave-find
查找和打印mysql所有从服务器复制层级关系
2.1、查找主服务器的mysql有所有从的层级关系
pt-slave-find --user=root --password=123456--host=10.168.1.216
三、pt-slave-restart
监视mysql复制错误,并尝试重启mysql复制当复制停止的时候
3.1、监视从,跳过1个错误
pt-slave-restart --user=root --password=daqi-123456 --host=10.168.1.217 --skip-count=1
3.2、监视从,跳过错误代码为1062的错误
pt-slave-restart --user=root --password=daqi-123456 --host=10.168.1.217 --error-numbers=1062
四、pt-table-checksum
检查数据是否一致(在主库执行)
4.1、比较test数据库同步是否一致,结果显示所有的表
pt-table-checksum --nocheck-replication-filters --databases=testDb --replicate=testDb.checksums --create-replicate-table --host=10.168.1.216 --port 3306 -uroot -p123456
参数说明:第一次运行的时候需要添加--create-replicate-table参数,如果不加这个就需要手工运行添加表结构的SQL,表结构SQL如下:
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,
PRIMARY KEY (db, tbl, chunk),
INDEX ts_db_tbl (ts, db, tbl)
) ENGINE=InnoDB
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format :不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。(注意:要谨慎使用,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示。)
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
h=127.0.0.1 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
运行结果行显示的结果参数说明:
TS :完成检查的时间。
ERRORS
:检查时候发生错误和警告的数量。
DIFFS
:0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS
:表的行数。
CHUNKS
:被划分到表中的块的数目。
SKIPPED
:由于错误或警告或过大,则跳过块的数目。
TIME
:执行的时间。
TABLE
:被检查的表名。
备注:
(pt-table-checksum 其工作原理是通过计算每个表的散列值 并将计算过程在服务器上重放 从而拿到主从各自的散列值做比较,但是pt-table-checksum 不是直接计算整个表的散列值,而是分块计算避免服务器长时间延时 因此在计算散列过程重放时是基与statement 不能基于row)
五、pt-table-sync
高效同步mysql表的数据
原理:总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失.执行execute之前最好先换成--print或--dry-run查看一下会变更哪些数据。
--print :打印,但不执行命令。
--execute :执行命令。
5.1、同步Master(10.168.1.216)上a表数据到Slave(10.168.1.217),在执行之前可以用--execute参数换成--print来查看会变更什么东西,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址
查看:pt-table-sync --print --user=root --password=123456 h=10.168.1.216,D=testDb,t=aaa h=192.168.3.92
同步:pt-table-sync --execute --user=root --password=123456 h=10.168.1.216,D=testDb,t=aaa h=192.168.3.92
5.2、同步Master(10.168.1.216)上数据到Slave(10.168.1.217)
pt-table-sync --execute --sync-to-master --user=root --password=123456 h=10.168.1.217 --database testDb
5.3、只同步指定的a表
pt-table-sync --execute --sync-to-master --user=root --password=123456 h=10.168.1.217,D=testDb,t=a
5.4、根据pt-table-checksum的结果进行数据同步
pt-table-sync --execute --replicate testDb.checksums --user=root --password=123456 h=10.168.1.216
5.5、根据pt-table-checksum使从的数据和主的数据一致
pt-table-sync --execute --replicate test.checksums --user=root --password=123456 --sync-to-master h=10.168.1.217,D=testDb,t=a