2010-03-09 97 views
0

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

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

有没有人遇到过这样的问题?

+3

听起来像你的出口没有完成。 – Seth 2010-03-09 03:03:15

+1

计数是相同的,因此导出可能已完成。将本地副本重新导出到第二个文件,并将第二个文件与第一个文件(您用于导入本地数据库)进行比较。它们应该是相同的。另外,如果在JOIN中使用了任何自动增量列(例如作为外键),请确保您的导出保留了原始数据库中的值,而不是强制导入重新生成自动增量序列。 – vladr 2010-03-09 03:32:18

+0

好的提示Vlad - 在你提到这个之前我发现了这个问题,但是希望我已经先阅读了你的帖子。问题在于导出数据库中的某些行的ID为0,但导入时给定了正整数ID。由于查询在某些这些0的id字段上进行了连接,因此在新的数据库上执行该连接时,由于FK引用损坏,导致某些结果丢失 – mwalsher 2010-03-12 18:50:37

回答

0

问题是导出的数据库中的某些行的ID为0,但是当导入时被赋予正整数ID。结果,破碎的FK引用导致了不同的结果查询。

0

我遇到过这样的问题,从4.1升级到5.0时,由于SQL在不同版本上的实现方式发生了变化。你的意见可能会受到这样的影响。

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

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

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

也许这可能是太习惯:

mk-query-digest - 提取日志查询重播。 (我不确定这是否适用于查询日志或只是慢查询日志:我们写了一个类似的工具,所以没有使用这个)

相关问题