VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > MySQL >
  • MySQL教程之Percona-Toolkit 之 pt-table-checksum 总结(3)

tbl = 'employees_ptchksum' AND chunk = '5' '对应emp_no > 499999' 51 Query SHOW GLOBAL STATUS LIKE 'Threads_running' 51 Query EXPLAIN SELECT COUNT(*), '0' FROM `employees`.`employees_ptchksum` FORCE INDEX(`PRIMARY`) WHERE ((`emp_no` > '499999')) ORDER BY `emp_no` /*explain past upper chunk*/ 51 Query REPLACE INTO `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT 'employees', 'employees_ptchksum', '6', 'PRIMARY', '499999', NULL, COUNT(*), '0' FROM `employees`.`employees_ptchksum` FORCE INDEX(`PRIMARY`) WHERE ((`emp_no` > '499999')) ORDER BY `emp_no` /*past upper chunk*/ 51 Query SHOW WARNINGS 51 Query SELECT this_crc, this_cnt FROM `percona`.`checksums` WHERE db = 'employees' AND tbl = 'employees_ptchksum' AND chunk = '6' 51 Query UPDATE `percona`.`checksums` SET chunk_time = '0.002064', master_crc = '0', master_cnt = '0' WHERE db = 'employees' AND tbl = 'employees_ptchksum' AND chunk = '6' 51 Query SHOW GLOBAL STATUS LIKE 'Threads_running' 51 Query SHOW MASTER STATUS 51 Quit

根据general log可以看出,pt-table-checksum主要工作的流程可以总结如下:

  1. 连接主库和从库,查询当前数据库服务器信息,包括参数设置,负载信息等;
  2. 根据工具选项设置会话级别参数,设置会话级binlog row formatSTATEMENT
  3. 根据工具选项创建校验结果表(默认为percona.checksums表),查看当前数据库服务器运行状态;
  4. 获取校验的数据库和表,逐张顺序进行检查校验;
  5. 开始分析表,根据表的索引(如有),将表分成多个chunk,每个chunk包含多行,默认为1000,chunk对应的表行数可以根据数据库性能状态动态调整;
  6. 根据以上分析生成表的校验语句,并检查表结构;
  7. 开始进行表的校验分析,为了保证一致性,这个阶段会将当前chuck所包含的行加上行锁,并将校验的结果以replace into方式存入校验结果表;
  8. 再次查询校验结果表,并更新master_crcmaster_cnt的值(主库),如果是从库则是this_crcthis_cnt
  9. 根据数据库运行状态调整下一个chunk所包含行数;
  10. 继续下一个chunk的校验检查,直到表中所有的chunk校验完成;
  11. 从库运行完校验检查,汇总这张表的结果;
  12. 循环完成所有需要校验的表直到完成所有的表的校验操作。
回到顶部

总结

  1. pt-table-checksum是当前MySQL主从数据库数据一致性校验比较好的工具,但也会对服务器性能造成影响,尽管影响的范围有限,在进行每个chunk检查校验时会对chunk中涉及的表行加锁,所以,检验还是尽量在业务低峰期进行操作;
  2. pt-table-checksum工具无法对主从表结构不一致的表进行校验;
  3. 校验结果只能看出哪些表出现不一致性,并无法得出具体出现多少行数据不一致,哪些数据行不一致等。
  4.  

相关教程