前言
在我多年的mysql的运维实践中,经常会碰到添加字段,索引或者主从不一致的问题,这应该是让dba十分头疼的一件事。percona-tookit提供了一些列mysql的运维工具,本次主要实践下pt-online-schema-change(在线表结构变更)、pt-table-checksum(数据校验)、pt-table-sync(数据同步)三个工具,并在实践中总结了使用的注意事项。实验环境数据库版本5.7,pt版本3.1。
测试pt-online-schema-change
一、安装
软件解压直接用,不多说了。在使用的过程中,如果有依赖包的报错,缺什么装什么,比如:

直接yum安装就行:

二、无读写添加字段
创建一张2kw记录的表,测试在无读写状态下,通过pt-online-schema-change和alter添加字段的情况。

alter直接添加字段,10.73s

利用pt工具添加字段,时间在70s左右,相比于alter直接添加没有任何优势。

三、低频读写添加字段
用下面的脚本模拟对表big_table的低频读写。

alter直接添加字段,时间12.89s,时间跟无读写的时间差不多。

利用pt工具添加字段,时间80s,比无读写时间长10s。

四、高频读写添加字段
利用mysqlslap持续对big_table进行增删查改。

alter直接新增字段,时间47s,

利用pt工具添加字段,时间5分多。

综上,在mysql5.7已经实现了online ddl的情况下,使用pt工具在线添加字段性能远远不如mysql自己的实现方式。
测试pt-table-checksum和pt-table-sync
一、制造主从不一致的场景。

备库:

由于以上两个工具,依赖于主从复制的状态正常,如果sql线程或者io线程中断,工具是无法生效的,我这里在备库设置了slave-skip-errors=all,让备库跳过所有报错,保证sql thread和io thread可以正常运行。
二、进行数据校验
连接主库运行,可以看出test表有

三、执行修复

确认备库数据,这个时候可以看到主备库数据已经追平了。




