首页 > 解决方案 > MySQL中的校验和不同

问题描述

MySQL 5.0 中相同的表可能有不同的校验和是否有任何原因,如果是这样,有没有办法解决这个问题?

我有两个复制的数据库,它们莫名其妙地具有不同的校验和。第一次发生这种情况时,它在我能够正确复制它并提出这个问题之前就消失了,现在它在同一周内第二次发生了。

当我手动检查表时,它们是完全相同的,每一行的校验和都对应相同,表结构相同,并且它们运行在相同版本的 MySQL ( 5.0.96-community-nt-log) 上,而不是数据库复制 ( Slave_IO_Runningand Slave_SQL_Running)报告正常运行。

校验和怎么可能不同?

数据库 A

MySQL [libertyintelligence]> select md5(concat(LS_MapAssetLinkId,LS_Map,LS_Asset,LS_X,LS_Y,LS_MinZoom,LS_MaxZoom,LS_ZOrder)) from ls_mapassetlink;
+----------------------------------+
| md5(...)                         |
+----------------------------------+
| c3c060c7c514ac3e410b50c0eb0f63f9 |
| a97a117c63f9a2472b96e517c303e42f |
| 946dacb76c8e2919d1ce791211da660c |
| 112a10fe77558beca686ec2c9281ce7d |
| 271b8de08f13252ff0e58ac20590c9ce |
| 837e88605f4a7b1e0f2a78d40bf8ce1f |
+----------------------------------+
6 rows in set (0.00 sec)

MySQL [libertyintelligence]> checksum table ls_mapassetlink;
+-------------------------------------+------------+
| Table                               | Checksum   |
+-------------------------------------+------------+
| libertyintelligence.ls_mapassetlink | 1670286008 |
+-------------------------------------+------------+
1 row in set (0.00 sec)

数据库 B

MySQL [libertyintelligence]> select md5(concat(LS_MapAssetLinkId,LS_Map,LS_Asset,LS_X,LS_Y,LS_MinZoom,LS_MaxZoom,LS_ZOrder)) from ls_mapassetlink;

+----------------------------------+
| md5(...)                         |
+----------------------------------+
| c3c060c7c514ac3e410b50c0eb0f63f9 |
| a97a117c63f9a2472b96e517c303e42f |
| 946dacb76c8e2919d1ce791211da660c |
| 112a10fe77558beca686ec2c9281ce7d |
| 271b8de08f13252ff0e58ac20590c9ce |
| 837e88605f4a7b1e0f2a78d40bf8ce1f |
+----------------------------------+
6 rows in set (0.00 sec)

MySQL [libertyintelligence]> checksum table ls_mapassetlink;
+-------------------------------------+-----------+
| Table                               | Checksum  |
+-------------------------------------+-----------+
| libertyintelligence.ls_mapassetlink | 123437249 |
+-------------------------------------+-----------+

或者具体地说,当数据显示表相同时,一个 DB 将表校验和显示为1670286008而另一个显示为123437249

我和我的同事都独立检查了这个(独立连接到数据库,独立检查),并且都被难住了。我发现校验和可能不同的唯一原因是如果我使用不同的数据库版本,但它们也是相同的版本。

表架构 两个系统上的架构相同:

CREATE TABLE `ls_mapassetlink` (
  `LS_MapAssetLinkId` bigint(20) unsigned NOT NULL auto_increment,
  `LS_Map` bigint(20) unsigned NOT NULL,
  `LS_Asset` bigint(20) unsigned NOT NULL,
  `LS_X` double NOT NULL,
  `LS_Y` double NOT NULL,
  `LS_MinZoom` int(11) NOT NULL,
  `LS_MaxZoom` int(11) NOT NULL,
  `LS_ZOrder` int(11) NOT NULL,
  PRIMARY KEY  (`LS_MapAssetLinkId`),
  KEY `INDEX_MapAssetLink_Map` (`LS_Map`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1

更新在 DBA.stackexchange 上发现了非常相似的问题

标签: mysqldatabasedatabase-replicationchecksum

解决方案


推荐阅读