MySQL查询在两个相同的数据库上返回不同的结果集

时间:2010-03-09 03:01:20

标签: sql mysql

我将一个实时MySQL数据库(运行mysql 5.0.45)导出到本地副本(运行mysql 5.1.33),导入时没有错误。数据库中有一个视图,当在本地执行时,返回的数据集与远程执行时不同。它返回32个结果而不是63.当我执行原始sql时,会出现同样的问题。我已经检查了所有正在连接的表中的数据,并且计数是相同的。

查询很简单,没有条件 - 但大约有10个连接。除了mysql版本的差异......我找不到任何理由这个查询会在数据库之间返回不同的结果......因为它们是有效的精确副本。

之前有没有人遇到这样的问题?

2 个答案:

答案 0 :(得分:0)

由于在不同版本上实现SQL的方式发生了变化,我在从4.1升级到5.0时出现了类似的问题。您的观点可能会受到类似的影响。

我们的升级过程现在涉及构建两个版本的同步副本,从实时查询日志中提取,并针对这两个版本播放这些副本并比较结果。对于4.1到5.0的升级,由于我们有超过1000个不同的查询,我们花了6个月的时间来完成使系统兼容所需的更改。

Maatkit提供了一些帮助升级的工具:

mk-table-checksum - 在两个版本上创建表的校验和。这将识别可能在整个负载中蔓延的微小差异。

可能也可以使用它:

mk-query-digest - 从日志中提取查询以进行重播。 (我不确定这是否适用于查询日志或只是慢查询日志:我们编写了类似的工具,因此没有使用它。)

答案 1 :(得分:0)

问题在于导出的数据库中的某些行的ID为0,但是在导入时会给出正整数ID。因此,损坏的FK引用导致了不同的结果查询。