首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回不同值的主从复制的Mysql校验和,尽管它们是相同的。

问返回不同值的主从复制的Mysql校验和,尽管它们是相同的。
EN

Database Administration用户
提问于 2014-07-17 09:46:44
回答 2查看 2.8K关注 0票数 2

我已经在mysql中设置了主从复制,并且为了确保我知道数据是否开始不同步,我创建了一个脚本:

  1. 锁定两个服务器上的两个数据库。
  2. 将所有表的校验和打印到文本文件中。
  3. 复制是从校验和文本文件的主人。
  4. 比较这两个文件,看看是否有不同之处。

但在一些桌子上,我得到了不同的校验和。因此,我下载了这两个表,并创建了另一个脚本来查找它们的不同之处。没什么不一样的!他们是一样的。

我只在有浮动变量的表上得到不同的校验和,因此我怀疑这与此有关。

我确实安装了稍微不同版本的mysql,这会导致这种情况吗?

代码语言:javascript
复制
+-------------------------+-----------------------------+
| Variable_name           | Value                       |
+-------------------------+-----------------------------+
| innodb_version          | 5.5.34                      |
| protocol_version        | 10                          |
| slave_type_conversions  |                             |
| version                 | 5.5.34-0ubuntu0.13.04.1-log |
| version_comment         | (Ubuntu)                    |
| version_compile_machine | x86_64                      |
| version_compile_os      | debian-linux-gnu            |
+-------------------------+-----------------------------+

+-------------------------+-----------------------------+
| Variable_name           | Value                       |
+-------------------------+-----------------------------+
| innodb_version          | 5.5.37                      |
| protocol_version        | 10                          |
| slave_type_conversions  |                             |
| version                 | 5.5.37-0ubuntu0.14.04.1-log |
| version_comment         | (Ubuntu)                    |
| version_compile_machine | x86_64                      |
| version_compile_os      | debian-linux-gnu            |
+-------------------------+-----------------------------+

你们谁知道这可能是什么原因?

EN

回答 2

Database Administration用户

发布于 2014-07-17 14:12:39

有更好的方法来检查主人和它的奴隶是否同步。

在主表上运行pt-table-校验和。

然后,如果它显示了一些表是不同的,使用这个脚本来查看确切的区别在哪里。http://bazaar.launchpad.net/~akuzminsky/+junk/stats-scripts/view/head:/compare_tables.sh

代码语言:javascript
复制
./compare_tables.sh master_ip slave_ip database table
票数 2
EN

Database Administration用户

发布于 2014-07-17 15:40:15

分析

您可能会遇到一些问题,不是FLOAT,而是VARCHAR。为什么?根据校验和表上的MySQL文档的说法:

校验和值取决于表行格式。如果行格式更改,校验和也会更改。例如,VARCHAR的存储格式在MySQL 4.1和5.0之间更改,因此如果将4.1表升级到VARCHAR 5.0,校验和值可能会更改。如果两个表的校验和不同,那么几乎可以肯定表在某种程度上是不同的。但是,由于校验和表使用的散列函数不能保证不发生冲突,所以两个不相同的表很可能产生相同的校验和。

我以前写过关于这种现象的文章。

警告

请注意For example, the storage format for VARCHAR changed between MySQL 4.1 and 5.0。这可能意味着还有其他示例(场景),其中FLOAT或某些其他数据类型可能与CHECKSUM TABLE有问题。如果问题表中有FLOAT列而没有VARCHAR列,那么FLOAT变量可能会受到此问题的影响。

结论

您需要执行以下操作

如果再次出现差异,则问题表具有带有CHECKSUM TABLE问题的数据类型。你必须做两件事之一

  • 用其他方式测试表的完整性( )
    • 行计数
    • 强制SQL比较列值

  • 信任您创建的表的物理/逻辑副本。

警告

有一些罕见的时间(< 0.01%),CHECKSUM TABLE没有产生一致的结果。因此,如果使用工具同步表,则可能需要尽职调查。对于事后仍未同步的所有表,无论数据复制后的校验和值如何,都必须采用复制数据的方法。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/71746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档