千家信息网

MYSQL 主从不一致如何解决

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章给大家介绍MYSQL 主从不一致如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MYSQL 中主从不一致是很可能发生的,而怎么能发现不一致则并不是一个很简单的问题。
千家信息网最后更新 2025年01月23日MYSQL 主从不一致如何解决

这篇文章给大家介绍MYSQL 主从不一致如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MYSQL 中主从不一致是很可能发生的,而怎么能发现不一致则并不是一个很简单的问题。尤其对数据量较大的情况下。废话说多无益,看下面的例子:

我们先建立一个存储过程,来插入我们的初始化数据

delimiter //

DROP PROCEDURE IF EXISTS insert_test_val;

##num_limit 要插入数据的数量,rand_limit 最大随机的数值

CREATE PROCEDURE insert_test_val()

BEGIN

DECLARE i int default 1;

DECLARE a varchar(20) ;

DECLARE b smallint ;

DECLARE c smallint ;

WHILE i<=1000000 do

set b = FLOOR(rand()*50);

set c = FLOOR(rand()*10);

if i mod 2 = 0 then

set a = 'peter';

elseif i mod 3 = 0 then

set a = 'jimmy';

elseif i mod 5 = 0 then

set a = 'Tim';

elseif i mod 4 = 0 then

set a = 'semon';

else

set a = 'lisa';

end if;

if b < 20 then

set b = b + 15;

end if;

INSERT into test.test values (null,a,b,c);

set i = i + 1;

END WHILE;

END

//

运行存储过程插入数据, 在插入数据后,我们开始搞破坏了,我们将在从库删除一些数据。

然后我们开始运行 $ pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=test --replicate=test.checksums h=192.168.198.201,u=admin,p='1234.com',P=3306

注意:

1 每次pt-table-checksum 只能检查一个表

2 检查时不建议检查binlog format 否则会报错,pt-table-checksum 默认是要使用 statement 作为复制的方式

3 replicate 默认指定的表最好在需要鉴定数据是否一致的库下,这样在执行pt-table-sync 时候回比较方便。

4 给定检测的连接数据库的账户,应该具有建表或建库的权限

其中pt-table-checksum 主要是将需要检测的表(不是每行)通过块的方式(多行组成的数据),进行检测,通过CRC32的方式

通过命令检测,发现相关表上有数据chunck 不一致,并且在检测数据库的位置,建立了checksums 表,来记录相关的信息。

(相关的参数请查看官方文档)

同时在主库中在运行

pt-table-sync --replicate=test.checksums h=192.168.198.201,u=admin,p=1234.com,P=3306 h=192.168.198.202,u=admin,p=1234.com,P=3306 --print > /data/fix.sql

在导出SQL 后在相关的从库导入

然后回到主库,清理checksums 表,然后在执行一遍命令,在查看chekcsums表,可以很清晰的看到,每个chunk 的值都是相等的。

可以看到修复差异的数据是可以的。

刚才仅仅是数据不同(数据缺失),如果里面的数据并没有缺失,仅仅是里面的值变化了,会不会无法使用这个工具,答案是不可能

我们可以试试,从库修改name 值

截图中我们修改了NAME 的值

我们还是通过刚才的命令,可以清晰的看到,相关的修改的记录可以被找到并且可以被修复。

所以到目前为止,通过PT工具来修复主从不一致的方法还是很奏效的,但如果你大多数表都不一致了,那还是建议从做一次主从复制比较高效。

另外,MYSQL 提供一个 checksum table 的命令,也能快速的判断一个表和另一个表之间是否不相同。 注意这里用的是 不相同,通过官方的文提示两个不一样的table 也是有可能产生一致的值,当然这样的概率会比较低。

关于MYSQL 主从不一致如何解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 一致 检测 从不 命令 方式 还是 检查 运行 相同 内容 官方 工具 建议 数据库 更多 缺失 过程 面的 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 消防部队 网络安全 承诺书 手游传奇私服怎么开服务器 海南服务器地址是什么 河北保定华中技校软件开发 数据库冗余字段出现在哪 一些数据库软件怎么用 学校护苗网络安全课总结 苹果13网络安全保护怎么关闭 自动软件开发会代替程序员吗 简述软件开发文档制作的意义 怀旧服开新区服务器 数据库怎么删除表中数据文件 登录说服务器通信时出现问题 无法打开数据库错误53 金融证券软件开发商 数据库应用具备的特点 x3580服务器开不了机 高校信息服务平台数据库设计 杭州市安卓软件开发 数据库数据存在哪儿 网络安全的有关协议 删除数据库表的所有数据 数据库ic物理卡号被加密 网络安全人员收入 创业孵化公司数据库应用题 软件开发的发票是几个点 高校信息服务平台数据库设计 银行动态口令怎么与服务器对接 软件开发团队简介模板 网页如何使用数据库
0