利用pt-table-sync进行数据不一致修复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【前言】mysql由于软件本身的灵活性导致了可能主从数据库已经不一致了,但是数据库的主从监控却是正常的,前面已经介绍过pt-table-checksum工具可以检验出主从表中不一致的数据。

【前言】mysql由于软件本身的灵活性导致了可能主从数据库已经不一致了,但是数据库的主从监控却是正常的,前面已经介绍过pt-table-checksum工具可以检验出主从表中不一致的数据。

解决问题的能力比发现问题的能力更重要。本文档将介绍通过pt-table-sync处理主从数据库不一致的问题;

 

【说明】实验的环境和上次进行校验的环境和测试关联,测试之前请部署好环境;

image

 

【注意事项】pt-table-sync需要在从数据库上面进行执行

 

【使用说明】使用print参数,他会在屏幕显示修复的SQL语句。然后可以手工确认并执行。

脚本【1】  基于checksums信息对Slave 192.168.47.165同步testdb.john表数据

pt-table-sync --print --replicate=test.checksums --databases=test --tables=john --sync-to-master h=192.168.47.165,u=root,p=123456

percona-toolkit src_db:test src_tbl:john src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:john dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28054 user:root host:mysql02*/;

 

脚本【2】 全量同步修复Slave的testdb.john表数据

[root@mysql02 bin]# pt-table-sync --print  --sync-to-master h=192.168.47.165,P=3306,u=root,p=123456 --database test --tables=john

REPLACE INTO `test`.`john`(`id`) VALUES ('5') /*

percona-toolkit src_db:test src_tbl:john src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:john dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28054 user:root host:mysql02*/;

 

脚本【3】直接同步主从数据库test

[root@mysql02 bin]# pt-table-sync --print  --sync-to-master h=192.168.47.165,P=3306,u=root,p=123456 --database test


REPLACE INTO `test`.`checksums`(`db`, `tbl`, `chunk`, `chunk_time`, `chunk_index`, `lower_boundary`, `upper_boundary`, `this_crc`, `this_cnt`, `master_crc`, `master_cnt`, `ts`) VALUES ('test', 'john', '1', 0.004643, NULL, NULL, NULL, '42981178', '5', '42981178', '5', '2015-03-10 17:57:56') /*percona-toolkit src_db:test src_tbl:checksums src_dsn:P=3306,h=192.168.47.167,p=...,u=root dst_db:test dst_tbl:checksums dst_dsn:P=3306,h=192.168.47.165,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:28166 user:root host:mysql02*/;

 

以上的脚本中可以把--print替换成—execute,直接进行主从的数据库修复;

 

【注】用pt-table-sync修复的时候,必须保证被replace的表上有主键或唯一键,否则就会报以下的错误

Can't make changes on the master because no unique index exists at /usr/bin/pt-table-sync line 10655.  while doing test.john on 192.168.47.165

 

总结:pt-table-checksum 和 pt-table-sync 一起构成了mysql主从数据一致监控的两把利器,pt-table-sync在进行--execute的时候需要小心,一般情况都是进行print相应的sql语句,然后再到从数据库执行。

........................................................................................................................................................................

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 ) 

........................................................................................................................................................................

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
pt-tools系列:pt-online-schema-change 最佳实践
pt的详细步骤 Step 1: Create the new table. Step 2: Alter the new, empty table. This should be very quick, or die if the user specified a bad alter statement.
5048 0
|
关系型数据库 MySQL
pt-table-checksum原理详解
环境 MySQL: MySQL 5.6.27 OS: centos 6.6 tool: pt-table-checksum 2.2.15 它能做什么 业界最流行的MySQL主从数据对比工具,数据一致性检测最好的的工具,没有之一 如何使用 ./pt-table-che
7485 0
|
关系型数据库 数据库 PostgreSQL
|
关系型数据库 MySQL
pt-table-sync 使用介绍
pt-table-sync 使用介绍
2885 0