pt-table-checksum 针对某个库做数据校验

背景:

我们现在需要对线上主库(简称A)6个备库中的某个库(简称B)做数据校验;

方式:pt-table-checksum工具

<1> 第一步需要配置dsns,这样可以指定备库校验

在A库上某个库中:

CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );

INSERT INTO dsns (parent_id,dsn) values(1, "h=B,u=root,p=******,P=****");

<2> 第二步设定校验脚本

--databases  #这个是指定库
--max-lag=10 #指定库的延迟数 最大不要超过多少
--nocheck-replication-filters #
--no-check-binlog-format #忽略binlog模式
--ignore-tables # 忽略校验的表
--recursion-method=dsn=h=B,D=***,t=dsns #dsns模式下
--chunk-size #默认1000,可以修改低点

执行如下:

pt-table-checksum h=‘A‘,u=‘****‘,p=‘******‘,P=3306 --databases=*** --max-lag=10 --nocheck-replication-filters --no-check-binlog-format --replicate=***.checksums --ignore-tables=album_useralbum,album_photoexif --recursion-method=dsn=h=B,D=***,t=dsns 1>>/tmp/checksum_1.log 2>>/tmp/checksum_1.log

主库error.log:

160111 23:03:11 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. REPLACE... SELECT is unsafe because the order in which rows are retrieved by the
 SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave. Statement: REPLACE INTO `***`.`checksums` (db, tbl, chunk, chunk_index, lower_bo
undary, upper_boundary, this_cnt, this_crc) SELECT ‘qyer‘, ‘plan_onedayevent_h_15‘, ‘11‘, ‘PRIMARY‘, ‘138128303‘, ‘150253579‘, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS(‘#‘, `id`, `
plan_id`, `uid`, `play_time`, `typeid`, `catetypeid`, `pid`, `title`, `type`, `badword_level`, `oneday_id`, `badword`, `starthours`, `startminutes`, `endhours`, `endminutes`, `budgetid`, `textsids`, `hav_c
ron`, `addtime`, `updatetime`, `coord`, `address`, `rafill_reason`, `pid_old`, ……

问题: a. 执行的时候B库延迟可以严格控制在指定的范围内,但其他库延迟会很大;

b. 想着考虑让其他的库忽略复制checksums表,但改忽略复制表需要重启库;

c. 因为我们的binlog模式是mixed,所以主库error.log会报一堆错

-- 王老虎

时间: 2024-10-18 10:42:51

pt-table-checksum 针对某个库做数据校验的相关文章

.net 使用validator做数据校验

概述 在把用户输入的数据存储到数据库之前一般都要对数据做服务端校验,于是想到了.net自带的数据校验框架validator.本文对validator的使用方法进行介绍,并分析下校验的的原理. 使用validator校验数据 首先我们创建一个需要校验的实体类代码如下: [Table("apple")] public class Apple { public Guid Id {get;set;} [MaxLength(3,ErrorMessage="名称长度不能超过3个"

StringMVC 中如何做数据校验

步骤一:引入四个jar包 步骤二:注册类型转换器 <context:component-scan base-package="cn.happy.controller"></context:component-scan> <!-- 配置验证器 --> <bean id="myvalidator" class="org.springframework.validation.beanvalidation.LocalVal

mysql数据校验之字符集问题

场景:主库DB:utf8字符集备库DB:gbk字符集 需求:校验主备数据是否一致,并且修复 校验过程:设置主库连接为utf8,设置备库连接为gbk,分别进行查询,将返回的的结果集按记录逐字段比较. 显示结果:原本相同的汉字字符,数据校验认为不一致. 原因分析:对于主库而已,由于建立连接的字符集为UTF8,则返回的汉字字符编码为UTF8格式:对于备库而言则是GBK格式,而程序中通过字符串比较函数strcasecmp进行比较,显然不同的字符集编码,相同的字符有不同的二进制,因此结果肯定不会相等. 进

mysql(五)------针对主从同步的情况两个库进行数据校对及恢复

两台MySQL,发生了种种种种,导致了两个表的数据不一致,但是同步还在正常进行,后来意识到这种问题(可能之前skip啊,或者一开始搭建的时候就是不一致的状态),该如何修复呢?如果数据量小的情况可以考虑从新导数据,如果数据量很大的话,那就太要命了于是可以用percona-toolkit这个工具修复并并检查这种情况的再主备同步的时候在进行如下操作:在主库上安装pt-table-checksum安装: 1.安装软件包: # yum install perl perl-devel perl-Time-H

OGG 从Oracle备库同步数据至kafka

OGG 从Oracle备库同步数据至kafka Table of Contents 1. 目的 2. 环境及规划 3. 安装配置JDK 3.1. 安装jdk 3.2. 配置环境变量 4. 安装Dataguard 4.1. 安装备库软件 4.2. 配置dataguard 4.2.1. 主库 4.2.2. 备库 4.3. 完成操作 4.4. 启动实时复制 5. zookeeper集群 5.1. 上传并解压 5.2. 配置 5.3. 创建myid文件 5.4. 配置环境变量 5.5. 启动和查看服务

pt-table-checksum校验主从库数据库数据

pt-table-checksum校验与pt-table-sync,前者主要用于数据的校验,验证主从是否一致,后者主要用来修复数据,两者一般情况结合起来用可以修复数据不一致的问题. 一.pt-table-checksum 安装 下载工具包 的最新地址如下: https://www.percona.com/downloads/percona-toolkit/LATEST/安装pt-table-checksum 和pt-table-sync命令.需要先安装percona-toolkit 工具集 1.

nodejs使用mongodb做数据持久化

前段时间,写了一篇博客,讲解了在Mac下使用brew安装mongodb,这篇文章可以看做是续篇,使用nodejs操作mongodb,并封装一些有用的方法. nodejs操作mongodb,首先要使用npm安装操作mongodb数据库的包,有两个选择 mongoose 和 mongodb,由于mongodb的使用方式更接近mongodb原生的语法,所以这里我们使用mongodb模块,操作数据库. 在Mac下使用brew安装mongodb这篇文章中,已经讲解了mongodb数据库的性质和安装,也介绍

C正则库做DNS域名验证时的性能对比

C正则库做DNS域名验证时的性能对比 本文对C的正则库regex和pcre在做域名验证的场景下做评测. 验证DNS域名的正则表达式为: "^[0-9a-zA-Z_-]+(\\.[0-9a-zA-Z_-]+)*(\\.[a-zA-Z]{2,}\\.)$" 对于正常DNS请求日志中的6177578条日志做正则验证处理. 1,pcre 评测所用的pcre的版本号是:7.8.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2

Python 之 使用 PIL 库做图像处理

Python 之 使用 PIL 库做图像处理 1. 简介. 图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料. Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法. 2. 使用. 导入 Image