本文主要向您展示如何使用pt工具来验证和修复主从。内容简单易懂,条理清晰,希望能帮你解开疑惑。让边肖带领大家学习《如何使用pt工具验证修复主从》一文。
00-1010
使用pt工具校验主从一致性并修复
pt-table-校验和是Percona-Toolkit。
用于检测MySQL主从库的数据是否一致。原理是在主库中执行基于语句的sql语句,生成主库中数据块的校验和,将相同的sql语句转移到从库中执行,计算从库中相同数据块的校验和。最后,比较主从库中相同数据块的校验和值,判断主从数据是否一致。在检测过程中,根据唯一索引将表分成组块,以单位计算,可以避免锁定表。测试时会自动确定复制延迟,
Master的负载,超过阈值后,会自动暂停检测,减少对在线服务的影响。
默认情况下,Pt-table-checksum可以处理大多数情况。官方表示,即使有数千个库和数万亿行,它仍然可以很好地工作。这是因为设计简单,一次检查一个表不需要太多内存和冗余操作。必要时,pt-table-checksum将根据服务器负载动态改变块大小,从而减少来自库的延迟。
为了减少对数据库的干预,pt-table-checksum也会自动检测并连接到从库。当然,如果失败了,您可以指定-recurse-method选项来告诉从库在哪里。它的易用性还体现在这样一个事实上,如果复制有延迟,它将从库中复制。
校验和将被暂停,直到它赶上主库的计算时间点(也通过选项-设置最大容许延迟值,这被认为是不一致的)。
为了确保主数据库服务的安全性,该工具实施了许多保护措施:
1)自动将innodb_lock_wait_timeout设置为1s,以避免引起锁定。
2)默认情况下,当数据库中并发查询超过25个时,pt-table-checksum将被挂起。您可以设置- max-load选项来设置此阈值。
3)使用时。
在Ctrl停止任务后,该工具通常会完成当前的块检测,下次您开始使用- resume选项时,您可以恢复下一个。
矮胖的人或物
【工作过程】
1.
连接到主库:pt工具连接到主库,然后自动发现主库的所有从库。默认情况下,显示从属主机用于查找从属库,但这仅在主实例和从属实例的端口相同时有效。
2.
了解主库或从库是否有复制筛选规则:默认情况下,为安全起见,此选项处于选中状态。您可以关闭此检查,但这可能会导致校验和的sql语句不与从库同步,或者从库会发现从库中没有要检查的表,这将导致从库同步卡库。
3.开始获取表格,并逐一计算。
4.
如果它是表的第一个块,那么块大小一般是1000;如果它不是表的第一个块,则采用在12个步骤中分离的结果。
5.检查表结构,执行数据类型转换等。并生成校验和的sql语句。
6.根据表上的索引和数据分布,选择最适合的拆分表的方法。
7.启动校验和表。
8.默认情况下,在分块一个表之前,删除上次与该表相关的计算结果。除非-继续。
9.
根据解释的结果,判断组块的大小是否超过你定义的组块大小上限。如果超过,将忽略该区块,以免影响在线性能。
10.为要校验和的行添加更新锁,并计算。
11.将计算结果存储在master_crc master_count列中。
12.调整下一个块的大小。
13.
等待从库赶上主库。如果没有延迟备份的从库在运行,最好检查所有从库。如果发现延迟最大的从库的延迟超过最大延迟秒,pt工具将在此暂停。
14.如果发现主库的最大负载超过某个阈值,pt工具将在此暂停。
15.继续下一个块,直到表被分块。
16.等待校验和的执行
如果pt工具使用不当,会影响业务的正常使用,甚至死亡。
锁情况,下面结合生产经验,使用如下参数进行校验
-
TS :完成检查的时间戳。
-
ERRORS
:检查时候发生错误和警告的数量。 -
DIFFS :不一致的chunk数量。当指定 --no-replicate-check 即检查完但不立即输出结果时,会一直为0;当指定 --replicate-check-only 即不检查只从checksums表中计算crc32,且只显示不一致的信息(毕竟输出的大部分应该是一致的,容易造成干扰)。
-
ROWS :比对的表行数。
-
CHUNKS :被划分到表中的块的数目。
-
SKIPPED
:由于错误或警告或过大,则跳过块的数目。 -
TIME :执行的时间。
-
TABLE :被检查的表名
【修复脚本】
点击(此处)折叠或打开
-
user=""
-
password=""
-
charset="utf8mb4"
-
replicate="pt.checksum"
-
chunk_size="1500"
-
pid="/data/script/mysql/pt-table-sync.pid"
-
sync_to_master="h=10.9.129.33,P=3306"
-
tables="kuaikan.device_push_info"
-
/usr/bin/pt-table-sync \
-
--user=${user} \
-
--password=${password} \
-
--pid=${pid} \
-
--bin-log \
-
--tables="${tables}" \
-
--buffer-in-mysql \
-
--no-buffer-to-client \
-
--charset=${charset} \
-
--no-check-child-tables \
-
--no-foreign-key-checks \
-
--check-master \
-
--replicate=${replicate} \
-
--sync-to-master ${sync_to_master} \
-
--check-slave \
-
--check-triggers \
-
--chunk-size=${chunk_size} \
-
--print \
-
--transaction \
-
--verbose
【修复脚本参数说明】
1)print只是打印需要执行的命令,确认无误后把参数—print改成—execute
2)sync_to_master此处填写从库的地址,只需要填写从库地址,会自动从从库show slave status获取主库的信息,不需要再写主库的地址,写了从库地址后,会根据从库差异对这个从库进行更改,无论如何都是在master端执行。并不会对其他从库的差异进行修复。
3)no-buffer-to-client如果禁用该选项的话,MySQL会一次性发送所有的rows,针对大表
4)lock参数如果 使用—replicate 或者 –sync-to-master 参数时,slave端 是不会锁表的。锁表的时候使用的是 lock tables ,但是如果使用 --transaction 的话,就是在事务开始到提交这一段,开始锁表
以上是“如何使用pt工具校验修复主从”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65496.html