zoukankan      html  css  js  c++  java
  • MySQL主从数据一致性检验

    MySQL主从数据一致性检验

    检查主从数据一致性,我们使用pt-table-checksum ,pt-table-checksum是percona-tools一个工具,用来校验主从库数据是不是一致。

    作为一个MySQL DBA 这个包里percona-tools的工具,建议大家都学习一下。

    一、安装percona-tools工具

    # wget https://www.percona.com/downloads/percona-toolkit/3.0.6/binary/redhat/7/x86_64/percona-toolkit-3.0.6-1.el7.x86_64.rpm
    # yum localinstall percona-toolkit-3.0.6-1.el7.x86_64.rpm 
    

    二、pt-table-checksum使用说明

    1.参数介绍

    --replicate=db1.checksum: 表示把结果存放到db1.checksum表中,默认是在percona.checksum表中。
    --recursion-method="processlist": 表示以什么方式发现从库。我们这里使用 processlist方式。这种方式要求主库和从库端口必须相同。如果不相同,只能使用DSN方式。

    --databases=dbname :表示校验指定库,不验证其他库。如果是所有库,可以不加这个参数就可以。如果要验证多个库,可以用逗号分隔,例如--databases=db1,db2,db3
    --tables=tbname: 表示检验指定的表。
    --nocheck-binlog-format :不让命令检测binlog 格式,使用这个命令的时候,使用的账号和密码 也必须可以从主库登录从库才可以。否则就报无法连接从库的错误。Cannot connect to P=3306,h=dev-hd-node3,p=...,u=root
    --replicate-check-only :表示只显示不一致的信息。一致信息就不显示了。只要有显示表示出现了不一致。

    2.输出内容介绍

    TS:完成检查的时间。
    ERRORS:检查时候发生错误和警告的数量。
    DIFFS:0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
    ROWS:被检查表的行数
    CHUNKS:被划分到表中的块的数目。
    SKIPPED:由于错误或警告或过大,则跳过块的数目。
    TIME:执行的时间。
    TABLE:被检查的表名。

    3.检测指定库

    # pt-table-checksum --nocheck-binlog-format --replicate=db1.checksum -h localhost -P3306 -u root -p unixfbi --databases=db1 --recursion-method="processlist" 
    Checking if all tables can be checksummed ...
    Starting checksum ...
    Cannot connect to P=3306,h=dev-hd-node3,p=...,u=root
    Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
                TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
    01-26T16:08:00      0      0       44       1       0   0.005 db1.tb1
    01-26T16:08:00      0      0       13       1       0   0.004 db1.tb2
    

    4.忽略某些库的检测

    使用 --ignore-databases参数,例如忽略mysql库的检测。

    # pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist" 
    Checking if all tables can be checksummed ...
    Starting checksum ...
                TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
    01-26T16:26:16      0      1       30       1       0   0.013 db1.checksum
    01-26T16:26:16      0      0       44       1       0   0.013 db1.tb1
    01-26T16:26:16      0      0       13       1       0   0.012 db1.tb2
    01-26T16:26:16      0      0        1       1       0   0.012 db2.tb3
    01-26T16:26:16      0      0        1       1       0   0.012 db2.tb4
    01-26T16:26:16      0      0        6       1       0   0.013 sys.sys_config
    01-26T16:26:16      0      0        2       1       0   0.013 wbx3306.t1
    01-26T16:26:16      0      0        0       1       0   0.013 wbx3306.tp_1
    

    5.只显示不一致内容

    # pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist" --replicate-check-only
    Checking if all tables can be checksummed ...
    Starting checksum ...
    Differences on dev-hd-node3
    TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
    db1.checksum 1 0 1   
    

    6.检测指定表

    --databases=dbname --tables=tbname 需要用到这两个参数

    # pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --databases=db1 --tables=checksum --recursion-method="processlist" --replicate-check-only     
    Checking if all tables can be checksummed ...
    Starting checksum ...
    Differences on dev-hd-node3
    TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
    db1.checksum 1 0 1   
    

    7.分段检测

    工作中一个表里可能有几百万甚至几千万条数据,如果对这样的表进行一致性检测的话,花费的时间会很长。所以我们可以对表进行分段检测,例如检测前1000行数据,或者5000行到10000行之间的数据。
    其实我们这里是使用的 --where参数;

    # pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --databases=db1 --tables=checksum --recursion-method="processlist" --replicate-check-only --where="id < 20"  
    

    参考文档

    https://www.percona.com/software/database-tools/percona-toolkit
    https://www.percona.com/doc/percona-toolkit/LATEST/index.html
    http://blog.itpub.net/12679300/viewspace-1454837/

    本文出自 “运维特工” 博客,转载请务必保留原文链接 和 http://www.unixfbi.com

  • 相关阅读:
    ThreadLocal的设计理念与作用
    生产者消费者模式
    Java 线程池
    对象锁(包括方法锁)和类锁
    C++入门经典-例2.12-求逻辑表达式的值
    C++入门经典-例2.11-流输出小数控制
    C++入门经典-例2.10-控制输出精确度
    C++入门经典-例2.9-输出十六进制数以及大写的十六进制数
    C++入门经典-例2.8-输出整数,控制打印格式
    C++入门经典-例2.7-控制cout打印格式程序
  • 原文地址:https://www.cnblogs.com/pangguoping/p/8563823.html
Copyright © 2011-2022 走看看