mysql - MySQL中的校验和不同
问题描述
MySQL 5.0 中相同的表可能有不同的校验和是否有任何原因,如果是这样,有没有办法解决这个问题?
我有两个复制的数据库,它们莫名其妙地具有不同的校验和。第一次发生这种情况时,它在我能够正确复制它并提出这个问题之前就消失了,现在它在同一周内第二次发生了。
当我手动检查表时,它们是完全相同的,即每一行的校验和都对应相同,表结构相同,并且它们运行在相同版本的 MySQL ( 5.0.96-community-nt-log
) 上,而不是数据库复制 ( Slave_IO_Running
and 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
解决方案
推荐阅读
- c++ - 为什么 Boost atomic 示例中的无等待多生产者队列是无等待的
- java - 我可以在注解中使用类类型参数吗?
- c++ - 在 OpenGL4 中旋转相机的问题
- java - 我正在尝试增加 ConcurrentHashMap 的值
- ios - 不同 iOS 设备上的安全区域填充值是多少?
- reactjs - 世博会日历警报功能不会显示其“警报”
- vue.js - Vue 没有检测到滚动事件
- python - 使用数据框创建后将附加数据写入excel
- python - 如何从包含 NaN 的数组中提取连续元素
- python-3.x - 从 Windows 命令提示符复制 Anaconda 环境