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

MySQL主从数据一致性检验的更多相关文章

  1. 揭秘MySQL主从数据不一致

    前言: 目前MySQL数据库最常用的是主从架构,大多数高可用架构也是通过主从架构演变而来.但是主从架构运行时间长久后容易出现数据不一致的情况,比如因从库可写造成的误操作或者复制bug等,本篇文章将会详 ...

  2. 减少mysql主从数据同步延迟

    网上给出的解决办法: 基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素:1. 网络延迟2. master负载3. slave负 ...

  3. mysql 主从 数据不一致

    用pt-table-checksum校验数据一致性 Jun 4th, 2013 主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的 数据不一致,这会令人沮丧.通常我们 ...

  4. mysql 主从数据校验

    使用工具pt-table-checksum: /usr/bin/pt-table-checksum --user=root --password='mysqlpass' --host=127.0.0. ...

  5. MySQL主从数据同步延时分析

    一.MySQL数据库主从同步延迟                                                              要了解MySQL数据库主从同步延迟原理,我们 ...

  6. mysql 主从数据不一致 Slave_SQL_Running: No 解决方法

    在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No ...

  7. Mysql主从数据同步cheksum问题

    做主从同步时出现问题,show slave status显示错误: Last_IO_Error: Got fatal error from master when reading data from ...

  8. mysql 主从数据同步配置

    一主一从,单向同步 master 数据库的数据变更单向同步到 slave 数据库 互为主从,双向同步 master 数据库的数据变更同步到 slave 数据库,slave 数据库的数据边同步到 mas ...

  9. springboot自己实现mysql主从数据切换机制

    在很多公司都是实现了数据的读写分离,所谓的读写分离,就是写的时候从主库 ,然后从库就会从主库中复制过去,这样就会形成了数据的读写分离,然而在很多场景是适用的,那么我们怎么做呢,可以利用aop 加注解的 ...

随机推荐

  1. UVa 11100 旅行2007

    https://vjudge.net/problem/UVA-11100 题意: 给定n个正整数,把它们划分成尽量少的严格递增序列,尽量均分. 思路: 因为必须严格递增,所以先统计每个数字出现的次数, ...

  2. plsql过期解决方法

    1.首先,登陆PL/SQL Developer,PL/SQL Developer要到期了 2.输入指令“regedit”打开注册表,如图所示 3.然后,在注册表里按HKEY_CURRENT_USER\ ...

  3. java ShutdownHook介绍与使用

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java ...

  4. python 散列表查找

    class HashTable: def __init__(self, size): self.elem = [None for i in range(size)] self.count = size ...

  5. bash Shell 中如何实现条件判断之if判断

    http://blog.51cto.com/lovelace/1211353 bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:     ...

  6. 简单了解SQL(结构化查询语言)

    简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...

  7. 【Golang 接口自动化01】使用标准库net/http发送Get请求

    发送Get请求 使用Golang发送get请求很容易,我们还是使用http://httpbin.org作为服务端来进行演示. package main import ( "bytes&quo ...

  8. RabbitMQ入门_06_深入了解ack

    A. Delivery Tag 参考资料:https://www.rabbitmq.com/confirms.html 仔细查看一下 Consumer 的回调方法: public void handl ...

  9. CentOS Redhat Linux安装 Oracle Client 的注意点

    1) 安装文件要拷贝到本地文件系统执行 2) 虽然不知道 libXmu是什么,但是安装之后,关联包安装了许多,感觉很省心 yum install libXmu.i686 3)  还有找不到的包的话,用 ...

  10. CentOS 配置Tomcat服务脚本

    #!/bin/bash # description: Tomcat7 Start Stop Restart # processname: tomcat7 # chkconfig: JAVA_HOME= ...