我有 2 个大型 SQL 文件,每个文件大约 8GB。但是,在最新的备份中我发现一个文件丢失了 300MB 的数据。
我只是想比较哪些数据丢失了,这样我就可以检查它是临时数据还是重要数据已经消失了。
在 Ubuntu 14.04 上通过 diff 比较两个文件时,我总是遇到内存分配错误。我也尝试过其他允许超过内存的解决方案等等,但仍然没有帮助。
我想将 sql1 中存在但 sql2 中缺失的所有数据收集到新文件 sql3 中。
请帮忙!
编辑:我最近从 Simple MySQl-Server 迁移到 Percona XtraDB Cluster,在此过程中很多表从 MyISAM 转换为 INNODB。那么,这可能是 mysqldump SQL 文件减少 300MB 的原因吗?我严重怀疑这一点,因为SQL就是SQL,但是INNODB SQL代码无论如何都会减少吗?专家对此的建议将会有所帮助。
在处理大量数据时,SQL 转储比较很难进行。我会尝试以下方法:
这种比较方式应该更快,因为数据操作存储到数据库中要快得多,并且还具有可以轻松使用丢失数据的优点。例如。
SELECT *
FROM db1.sometable
WHERE NOT EXISTS (SELECT 1
FROM db2.sometable
WHERE db1.sometable.pkcol = db2.sometable.pk2)
将以便捷的方式返回准确缺失的信息。
如果导出转储,您可以使用 Beyond Compare、Semantic Merge、Winmerge、Code Compare 等工具或其他比较工具。
并非某些工具(即Beyond Compare)对一行有4096个字符的限制,这在比较中成为一个问题(我很生气)。可以在“工具”->“文件格式”->[选择您的格式,也许是“一切其他”]->“转换”->每行 64000 个字符(这是最大值)中进行更改。
您还可以尝试将文件格式更改为 SQL(尽管可能没有多大帮助;并且会减慢您的比较速度)。