我有一些数据库备份,我试图弄清楚是否有一种方法可以比较备份中的数据,以了解数据随时间的变化情况。我在要比较的字段上没有时间戳,但我在行上有一个唯一的 ID。备份是使用 mysqldump 创建的 .sql 文件。
有这样做的过程吗?
我有一些数据库备份,我试图弄清楚是否有一种方法可以比较备份中的数据,以了解数据随时间的变化情况。我在要比较的字段上没有时间戳,但我在行上有一个唯一的 ID。备份是使用 mysqldump 创建的 .sql 文件。
有这样做的过程吗?
MySQL 有许多 diff 工具,包括名为 MySQLDiff ( http://www.mysqldiff.org/ ) 的工具。还有一个命令行界面可以在这里找到:
http://devzone.intellitree.com/projects/intellitree-cli-extension-to-mysqldiff/
有关与此类似的可视化差异工具,请参阅之前的 StackOverFlow 帖子(以及其他一些解决方案):
理论上,您可以将备份作为第二个数据库导入,然后编写一个 PHP 脚本连接到您的 SQL 服务器并通过唯一 ID 迭代条目,并进行比较。
您也可以只diff
在命令行中使用,但生成的数据集可能不那么可行。
您可以使用WinMerge之类的工具或任何其他合并工具来查看备份的实际差异。成功与否取决于文件的大小。对于非常大的备份,我不建议这样做。
如果您使用 mysqldump 进行备份,那么您的备份文件将是标准文本文件。然后,您可以使用任何体面的文本文件比较实用程序(即 unix 系统上的 diff)来查看差异。
一件好事是表模式与数据一起被转储。
另一个好处是备份与版本和机器无关——您可以恢复到任何正在运行的 MySQL 副本。
缺点是转储的数据部分被写为最大长度的行,所以一些文本编辑器会窒息它。
干杯,
-R
有一个很好的工具是pydumpy
https://code.google.com/p/pydumpy/(镜像:https ://github.com/miebach/pydumpy )
它使您可以创建易于比较的转储diff
如果您想比较已经存在的转储,您可以首先从它们中的每一个创建一个临时 mysql 数据库并从那里开始。