前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云MySQL数据库迁移过程中使用pt-table-checksum做数据一致性校验

腾讯云MySQL数据库迁移过程中使用pt-table-checksum做数据一致性校验

原创
作者头像
杨泽华
发布2019-02-18 13:55:44
7.6K1
发布2019-02-18 13:55:44
举报

腾讯云数据库迁移过程中使用pt-table-checksum做数据一致性校验

本文描述了从自建MySQL迁移到腾讯云CDB时,如何做数据一致性校验。

腾讯云提供了数据库迁移工具DTS, 使用DTS做数据库迁移时,DTS工具在迁移任务结束后,会做数据校验。

但是在迁移过程中,DTS不会进行数据一致性校验。 如果要迁移的表比较大,或者迁移过程中选择了增量迁移,并且增量同步是周期较长,那么就有需求在数据同步过程中做数据校验。

本文描述了如何使用pt-table-checksum工具在DTS数据同步过程中做数据一致性校验。

测试环境搭建

本文测试环境架构如下:

云主机CVM 10.0.0.2上运行自建的MySQL数据库, 需要迁移到腾讯云CDB上,CDB的IP地址为:10.0.1.16.

pt-table-checksum工具运行在一台云主机CVM 10.0.0.1上, 这台云主机要求和 10.0.0.2 10.0.1.16互通。

本文假设已经在云主机10.0.0.2上安装好了MySQL数据库,并且已经创建了CDB实例。

在云主机10.0.0.1上安装percona tookit, 本文云主机使用centos系统。

首先安装依赖包:

代码语言:txt
复制
yuminstall perl perl-devel perl-Time-HiRes perl-DBI perl-DBD-MySQL

下载工具包:percona-toolkit

代码语言:txt
复制
wget http://www.percona.com/get/percona-toolkit.tar.gz

运行如下命令安装工具包:

代码语言:txt
复制
tar zxvf percona-toolkit-2.2.13.tar.gz
代码语言:txt
复制
cd percona-toolkit-2.2.13
代码语言:txt
复制
perl Makefile.PL
代码语言:txt
复制
make && make install

数据库环境准备

登陆 云主机10.0.0.2上的MySQL数据库, 创建一个测试表t1:

插入几条记录:

创建DTS迁移任务

登陆腾讯云DTS控制台,创建DTS迁移任务:

校验源数据库(10.0.0.2)的连通性

如果出现连接失败,需要先解决连接失败的问题:

本例中的连接失败是由于源数据库中root账号不允许远程登录导致的。允许root登录权限:

确认root登录的权限:

重新校验:

目标库选择已经创建好的CDB实例,IP地址为10.0.1.16:

由于是首次迁移,这里选择全量迁移,可以选择迁移整个实例,也可以选择迁移某个库里;

如果选择了数据一致性校验,那么会进行一致性校验:

查看校验失败的详情:

这里因为源数据库和CDB的GTID设置不一致导致的,源库的GTID是关闭的,开启源数据库的GTID:

重新校验通过,启动DTS任务。

等待一段时间,直至DTS迁移任务完成:

此时我们登陆到10.0.0.2中的数据库上,看一下源库中t1表中的数据:

在源库中插入一条新数据

登陆到CDB 10.0.1.16上,查询t1表:

代码语言:txt
复制
select * from t1;

数据已经同步过来了。

至此数据同步任务已经建立。

数据一致性校验

下面我们使用pt-table-checksum进行数据校验。

pt-table-checksum有很多参数,这里不详细描述各个参数的作用,有兴趣的同学可以参考官方文档

如果直接在10.0.0.1上运行pt-table-checksum命令时,会遇到如下问题:

代码语言:txt
复制
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.

这是由于找到slave导致的,这里可以通过设置--recursion-method参数解决。

代码语言:txt
复制
METHOD   USES
代码语言:txt
复制
===========  =============================================
代码语言:txt
复制
processlist  SHOW PROCESSLIST
代码语言:txt
复制
hostsSHOW SLAVE HOSTS
代码语言:txt
复制
cluster  SHOW STATUS LIKE 'wsrep\_incoming\_addresses'
代码语言:txt
复制
dsn=DSN  DSNs from a table
代码语言:txt
复制
none Do not find slaves

这里建议使用dsn模式。 dsn模式要求将slave的信息存入一个数据库表内。 所以我们在源库10.0.0.2上创建一个数据校验的账号:

代码语言:txt
复制
GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'zehua'@'%' identified by 'qcloud@123456';

在CDB控制台创建相同的数据库账号和密码,用于数据校验。

在源库10.0.0.2上创建pt-table-checksum 需要用到的表:

代码语言:txt
复制
create database percona;
代码语言:txt
复制
use percona;
代码语言:txt
复制
CREATE TABLE `percona`.`dsns` (
代码语言:txt
复制
`id` int(11) NOT NULL AUTO_INCREMENT,
代码语言:txt
复制
`parent_id` int(11) DEFAULT NULL,
代码语言:txt
复制
`dsn` varchar(255) NOT NULL,
代码语言:txt
复制
PRIMARY KEY (`id`)
代码语言:txt
复制
);

将slave的信息插入到表中:

代码语言:txt
复制
insert into dsns(dsn) values('h=10.0.1.16,P=3306,u=zehua,p=qcloud@123456');

这里dsn的值,h=10.0.1.16 表示slave的host,u=zehua表示CDB上用于数据校验的用户。

在10.0.0.1上运行pt-table-checksum命令:

代码语言:txt
复制
pt-table-checksum --replicate=percona.checksums --nocheck-replication-filters --no-check-binlog-format h=10.0.0.2,u=zehua,p='qcloud@12345  6',P=3306 --databases=test --recursion-method dsn=h=10.0.0.2,u=zehua,p='qcloud@123456',P=3306,D=percona,t=dsns

这里的参数解释:

代码语言:txt
复制
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
代码语言:txt
复制
--no-check-binlog-format  : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
代码语言:txt
复制
--replicate=   :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。 
代码语言:txt
复制
--databases=   :指定需要被检查的数据库,多个则用逗号隔开。
代码语言:txt
复制
--tables=  :指定需要被检查的表,多个用逗号隔开
代码语言:txt
复制
h=10.0.0.2:源数据库的地址
代码语言:txt
复制
u=zehua :用户名
代码语言:txt
复制
p='qcloud@123456':密码
代码语言:txt
复制
P=3306 :端口
代码语言:txt
复制
--recursion-method : 指定slave的地址
代码语言:txt
复制
dsn=h=10.0.0.2,u=zehua,p='qcloud@123456',P=3306,D=percona,t=dsns
代码语言:txt
复制
dsn=h=10.0.0.2: 代表dsn表的数据库host地址;
代码语言:txt
复制
u=zehua,p='qcloud@123456' 表示可以访问dsn表的用户名和密码;
代码语言:txt
复制
D=percona, :代表dsn表所在的数据库是percona
代码语言:txt
复制
t=dsns : 代表dsn表的表名是dsns

登陆到10.0.0.2的percona数据库,查询数据校验结果:

代码语言:txt
复制
select * from percona.checksums \G;
代码语言:txt
复制
this_crc: 7da89f71
代码语言:txt
复制
this_cnt: 6
代码语言:txt
复制
master_crc: 7da89f71
代码语言:txt
复制
master_cnt: 6

可以看到t1表的主从数据一致。 (本例中test库中有两个表,checksum和t1,重点关注t1表)。

至此数据一致性校验完成。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 腾讯云数据库迁移过程中使用pt-table-checksum做数据一致性校验
    • 测试环境搭建
      • 数据库环境准备
        • 创建DTS迁移任务
          • 数据一致性校验
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档