mysql 迁移 数据校验_my04_Mysql复制数据一致性校验

1. 搭建一套双节点的Mysql主从复制数据库

2. 主库初始化测试数据

drop table if existstest;create table test ( tid int,tname varchar(12),test_id int NOT NULL AUTO_INCREMENT COMMENT '主键',PRIMARY KEY(test_id));DROP PROCEDURE IF EXISTS`p_addtest`;

DELIMITER ;;CREATE DEFINER=`automng`@`10.%` PROCEDURE `p_addtest`(IN n int)BEGIN

DECLARE i int;SET i = 0;WHILE i

DELIMITER ;

call p_addtest(20000);

3. 安装 percona-toolkit

wget https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/redhat/7/x86_64/percona-toolkit-3.0.11-1.el7.x86_64.rpm

yum localinstall percona-toolkit-3.0.11-1.el7.x86_64.rpm -y

4. shell命令行执行校验,主库此时无业务数据插入

在哪个数据库服务器上执行没关系,关键是该命令连接的是主库,即host指向的是主库的IP地址,pt-table-checksum命令会自动查找该主库有哪些从库,无须人工干预

automng用户具有ALL PRIVILEGES 权限。

pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums  --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

输出结果,注意输出结果正常情况下是没有警告或者错误信息的,如果有,则输出结果可能不准确

Checking ifall tables can be checksummed ...

Starting checksum ...

TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE07-24T14:21:01 0 0 20000 0 4 0 0.075 vodb.test

重点在于DIFFS列,0表示主从数据一致,非0值表示不一值

5. 从库执行命令校验,主库模拟业务数据

主库模拟业务数据

mysql> call p_addtest(200000);

执行数据库一致校验,可以看到表中的数据一直在增长,但DIFFS的值为一直为0,这表示在使用 pt-table-checksum 命令做数据库一致校验时,无需关心主库是否存在业务

# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

Checkingifall tables can be checksummed ...

Starting checksum ...

TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE07-24T14:22:59 0 0 28850 0 4 0 0.203vodb.test

# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

Checkingifall tables can be checksummed ...

Starting checksum ...

TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE07-24T14:23:04 0 0 37302 0 4 0 0.581 vodb.test

6. 在从库插入数据使主从数据不一致

mysql> usevodb;Databasechanged

mysql> desctest;+---------+-------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+----------------+

| tid | int(11) | YES | | NULL | |

| tname | varchar(12) | YES | | NULL | |

| test_id | int(11) | NO | PRI | NULL | auto_increment |

+---------+-------------+------+-----+---------+----------------+

3 rows in set (0.01sec)

mysql> select max(test_id) fromtest;+--------------+

| max(test_id) |

+--------------+

| 220000 |

+--------------+

1 row in set (0.00sec)

mysql> insert into test values(220001,'实打实的手敲代码',220001);

Query OK,1 row affected (0.03 sec)

查看主从数据一致性

# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

Checkingifall tables can be checksummed ...

Starting checksum ...

TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE07-24T14:24:48 0 1 220000 1 4 0 0.605 vodb.test

DIFFS列值不为零,就表示vodb.test这张表数据存在主从不一致的情况

7.  pt-table-sync命令可以修改主从数据不一致的情况,但不推荐使用,建议还是手工排查出数据库不一致的原因,以防该现象重复出现,而不是一个命令执行完毕,数据库数据一致了,也不清楚该命令到底做了些什么。

这里不再操作该命令,若有兴趣可参考官方文档进行操作 https://www.percona.com/doc/percona-toolkit/3.0/pt-table-sync.html

8. 手工删除从库不一致数据

mysql> select max(test_id) fromtest;+--------------+

| max(test_id) |

+--------------+

| 220001 |

+--------------+

1 row in set (0.00sec)

mysql>mysql>mysql> delete from test where test_id=220001;

Query OK,1 row affected (0.05 sec)

9. 再次验证数据库一致性

# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

Checkingifall tables can be checksummed ...

Starting checksum ...

TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE07-24T15:28:30 0 0 220000 0 4 0 0.659 vodb.test

回顾总结

工具的安装不需要在主库上,也不需要在从库上,只需要在一台能够连接到主库的服务器上安装即可

连接用户要具有ALL PRIVILEGES 权限

pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb

DIFFS列值为0则数据一致,反之则不一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值