比较2个大sql文件并找出差异来恢复数据

问题描述 投票:0回答:3

我有 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代码无论如何都会减少吗?专家对此的建议将会有所帮助。

mysql sql compare diff
3个回答
2
投票

在处理大量数据时,SQL 转储比较很难进行。我会尝试以下方法:

  1. 将每个SQL文件数据导入到自己的数据库中
  2. 使用here指示的方法之一来比较数据库内容(我假设架构是相同的)。例如。 Toad for MySql

这种比较方式应该更快,因为数据操作存储到数据库中要快得多,并且还具有可以轻松使用丢失数据的优点。例如。

SELECT *
FROM db1.sometable
WHERE NOT EXISTS (SELECT 1 
                  FROM db2.sometable 
                  WHERE db1.sometable.pkcol = db2.sometable.pk2)

将以便捷的方式返回准确缺失的信息。


0
投票

如果导出转储,您可以使用 Beyond CompareSemantic MergeWinmergeCode Compare 等工具或其他比较工具。

并非某些工具(即Beyond Compare)对一行有4096个字符的限制,这在比较中成为一个问题(我很生气)。可以在“工具”->“文件格式”->[选择您的格式,也许是“一切其他”]->“转换”->每行 64000 个字符(这是最大值)中进行更改。

您还可以尝试将文件格式更改为 SQL(尽管可能没有多大帮助;并且会减慢您的比较速度)。


0
投票
  1. 仅将所需的表导出为单独的 CSV 文件。在 phpMyAdmin 中,您可以使用选项来做到这一点

  1. 使用任何版本控制应用程序,例如 SourceTree

或任何文件比较应用程序,如 FileMerge,

比较文件。

© www.soinside.com 2019 - 2024. All rights reserved.