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. 【Coursera】Sixth Week(2)

    DNS:Domain Name System The Domain Name System convert user-friendly names,like www.umich.edu, to net ...

  2. js文字转移效果

    这个例子算是有点样子的. 思路: 字符串操作.左框里面先是预设的.点击按钮时截取左框中的字符串的前一个字符到右框里的字符串后面,以此循环.点击按钮时按钮变为灰色,在循环完成后恢复.计数的总数(右边)是 ...

  3. UVa 11093 环形跑道(模拟)

    https://vjudge.net/problem/UVA-11093 题意:环形跑道上有n个加油站,编号为1~n.第i个加油站可以加油pi加仑,从加油站i开到下一站需要qi加仑汽油.输出最小的起点 ...

  4. php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式

    做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作 ...

  5. Linux——shell简单学习(一)

    首先来一个小程序,来查看所在目录,以及该目录下的文件 #!/bin/sh # “#!”指定用sh执行shell脚本 #this is to show workstation # “#” 表示注释 ec ...

  6. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT

    题目链接:http://codeforces.com/contest/776/problem/D D. The Door Problem time limit per test 2 seconds m ...

  7. bzoj 1832 lca

    1832: [AHOI2008]聚会 Time Limit: 10 Sec  Memory Limit: 64 MB Description Y岛风景美丽宜人,气候温和,物产丰富.Y岛上有N个城市,有 ...

  8. tyvj 2075 [NOIP2012T5]借教室 区间更新+二分

    描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样.面对海量租借教室的信息,我们自然希望编 ...

  9. python 等比数列

    def is_geometric(li): : return True # Calculate ratio ratio = li[]/]) # Check the ratio of the remai ...

  10. Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断

    Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断 目前常用的做法: