【问题标题】:comparing data from mysql backups比较来自mysql备份的数据
【发布时间】:2009-05-20 02:08:33
【问题描述】:

我有一些数据库备份,我正在尝试找出是否有一种方法可以比较备份中的数据,以了解数据随时间的变化情况。 我在要比较的字段上没有时间戳,但我在行上有一个唯一的 ID。备份是使用 mysqldump 创建的 .sql 文件。

是否有执行此操作的流程?

【问题讨论】:

    标签: mysql database schema mysqldump mysql-management


    【解决方案1】:

    有许多用于 MySQL 的 diff 工具,包括名为 MySQLDiff (http://www.mysqldiff.org/) 的工具。还有一个命令行界面可以在这里找到:

    http://devzone.intellitree.com/projects/intellitree-cli-extension-to-mysqldiff/

    查看之前的 StackOverFlow 帖子,了解与此类似的可视化差异工具(以及其他一些解决方案):

    https://stackoverflow.com/questions/218499/mysql-diff-tool

    【讨论】:

    • 对于这些工具中的每一个,我似乎都需要将备份加载到并行数据库中。我希望他们是一种直接从 .SQL 文件执行此操作的方法。但我只是查看了我的 .sql 文件包含的内容,我可以理解为什么它不能那样工作。我没有意识到 mysqldump 将数据库转储到一堆 mysql 语句中以重新创建数据库。
    【解决方案2】:

    理论上,您可以将备份作为第二个数据库导入,然后编写一个 PHP 脚本,连接到您的 SQL 服务器并按唯一 ID 迭代条目,并进行比较。

    您也可以只在命令行中使用diff,但生成的数据集可能不那么可行。

    【讨论】:

    • 我最初想创建一个 php 脚本,但希望我可以在不创建同一个数据库的多个实例的情况下做到这一点(似乎我可能需要这样做)。我希望他们只是查看 .sql 文件中的数据的方式
    • 如果备份之间的所有更改都是集合中的数据(不是任何表定义或任何东西),那么命令行差异肯定会起作用。它可能不会产生漂亮的结果。 (但是一些 bash 魔法应该可以解决这个问题:)
    • 我想我之前是误会了。我将 'diff' 视为 mysql 函数,但现在我明白你的意思是只做一个文件比较 diff。我认为这应该可行。
    【解决方案3】:

    您可以使用WinMerge 之类的工具或任何其他合并工具来查看备份的实际差异。成功与否取决于文件的大小。对于非常大的备份,我不建议这样做。

    【讨论】:

      【解决方案4】:

      如果您使用 mysqldump 进行备份,那么您的备份文件将是标准文本文件。然后,您可以使用任何体面的文本文件比较实用程序(即 unix 系统上的 diff)来查看差异。

      这样做的一个好处是表模式与数据一起转储。

      另一个好处是备份与版本和机器无关 - 您可以恢复到任何正在运行的 MySQL 副本。

      缺点是转储的数据部分被写成最大长度的行,所以一些文本编辑器会卡住它。

      干杯,

      -R

      【讨论】:

        【解决方案5】:

        有一个很好的工具是pydumpyhttps://code.google.com/p/pydumpy/(镜像:https://github.com/miebach/pydumpy

        它可以让您创建易于与diff 比较的转储

        如果你想比较已经存在的转储,你可以先从每个转储中创建一个临时 mysql 数据库,然后从那里开始。

        【讨论】:

          猜你喜欢
          • 2023-03-16
          • 2016-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-22
          • 1970-01-01
          • 2011-01-31
          • 1970-01-01
          相关资源
          最近更新 更多