Arie K Asked: 2009-07-31 09:14:08 +0800 CST2009-07-31 09:14:08 +0800 CST 2009-07-31 09:14:08 +0800 CST 使用 Subversion 进行增量 MySQL 备份 772 我们的 MySQL 数据库服务器托管数十个数据库,转储文件大小从 1 到 ~100 MB。 目前,我们的备份方法是mysqldump,包装在 shell 脚本中,并从 crontab 运行。这对我们很有用。唯一的主要缺点是存储转储文件需要大量存储空间。 由于 MySQL 数据库转储是文本文件,我自然会考虑将其存储在版本控制系统中,例如 Subversion。我记得 Subversion 只在每次提交中存储文件的增量。 推荐这种方法吗?是否有一些我们应该注意的问题? backup mysql svn 6 个回答 Voted SirStan 2009-07-31T09:19:30+08:002009-07-31T09:19:30+08:00 MySQL 文档可能正是您所需要的。二进制增量备份!(对于通过 rsync/ftp/etc 的穷人从服务器也很好)。 MySQL 支持增量备份: 您必须使用 --log-bin 选项启动服务器以启用二进制日志记录;请参阅第 5.2.4 节,“二进制日志”。二进制日志文件为您提供了在执行备份之后将更改复制到数据库所需的信息。在您想要进行增量备份(包含自上次完整或增量备份以来发生的所有更改)的那一刻,您应该使用 FLUSH LOGS 轮换二进制日志。完成后,您需要将所有二进制日志复制到备份位置,范围从最后一次完整或增量备份到最后一个。这些二进制日志是增量备份;在恢复时,您可以按照第 6.3 节“时间点恢复”中的说明应用它们。下次进行完整备份时,您还应该使用 FLUSH LOGS、mysqldump --flush-logs 或 mysqlhotcopy --flushlog 轮换二进制日志。请参阅第 4.5.4 节,“mysqldump - 数据库备份程序”和第 4.6.9 节,“mysqlhotcopy - 数据库备份程序”。 Best Answer pQd 2009-08-02T03:51:01+08:002009-08-02T03:51:01+08:00 SirStan 提到的 binlog 是一个很好的方法。 或者,您可以运行 mysqldumps,然后使用rdiff-backup创建转储文件的备份。rdiff 将保留 n 次最后备份 [您决定多少],并且将非常节省空间,因为它仅保留最新版本的文件 + 差异集的完整快照,从而允许它重建以前的版本。 无论你在 svn 中放入什么,都保留在 svn 中。存储库只会增长——所以它是保存你的 sql 模式、源代码和文档的好地方;但不是来自 sql 的实际数据。 jonaz 2009-08-02T02:58:57+08:002009-08-02T02:58:57+08:00 使用 svn 会占用大量空间。 假设你提交了 100mb 文件并且 svn 成为版本 1,那么如果你添加一个 200mb 的新文件,版本将是 2。 您的 svn 存储库将是 300mb。 如果您喜欢版本 1 中的文件,则必须 svn co -r 1 svnrepourl sbell 2011-07-01T06:07:06+08:002011-07-01T06:07:06+08:00 我知道这个问题有点过时,但在我的公司,我们一直在尝试类似的东西。我们一直在提取大约 300 MB 大小的 xml 格式的备份(不是来自 MySQL,但仍然是简单的文本文件),并将它们提交到 SVN 存储库,每晚一个多星期。第一次提交将存储库设置为 41 MB,但此后的每次提交都较小。我们现在处于修订版 8,存储库的总大小只有 57 MB。这大约是它包含的所有历史大小的 2.5%! 我刚刚使用相同的数据尝试了 rdiff-backup;下面是一个比较(所有大小以 MB 为单位): Backup # 备份大小 repo size delta rdiff size delta 0 0 0.03 0.03 0 0 1 286.05 41.49 41.46 286.05 286.05 2 285.93 45.97 4.49 322.13 36.08 3 286.23 50.52 4.54 323.27 1.14 4 286.63 50.79 0.27 324.54 1.26 5 287.46 55.52 4.73 326.54 2.00 6 287.76 55.77 0.25 327.72 1.19 7 288.15 56.14 0.37 328.98 1.26 8 288.41 56.63 0.50 330.36 1.38 看起来增量大致相同(有时 svn 更好,有时 rdiff-backup 更好),所以在整体大小上,SVN 获胜。rdiff 的一个优点是可以轻松删除旧备份,而使用 SVN,您必须执行svnadmin dump和svnadmin load才能删除旧版本。我想这是一个偏好问题,但 SVN 易于使用,并且有大量的工具可以支持它。 Sam Bauers 2013-02-14T20:33:16+08:002013-02-14T20:33:16+08:00 查看此脚本,它可以自动执行该过程,允许特定选择数据库和排除表 [免责声明我是作者] - http://mysql-svn-backup.redant.com.au/ Аркадий Петров 2017-03-03T04:29:50+08:002017-03-03T04:29:50+08:00 Percona XtraBackup支持 MySQL 数据库的增量热备份。
MySQL 文档可能正是您所需要的。二进制增量备份!(对于通过 rsync/ftp/etc 的穷人从服务器也很好)。
SirStan 提到的 binlog 是一个很好的方法。
或者,您可以运行 mysqldumps,然后使用rdiff-backup创建转储文件的备份。rdiff 将保留 n 次最后备份 [您决定多少],并且将非常节省空间,因为它仅保留最新版本的文件 + 差异集的完整快照,从而允许它重建以前的版本。
无论你在 svn 中放入什么,都保留在 svn 中。存储库只会增长——所以它是保存你的 sql 模式、源代码和文档的好地方;但不是来自 sql 的实际数据。
使用 svn 会占用大量空间。
假设你提交了 100mb 文件并且 svn 成为版本 1,那么如果你添加一个 200mb 的新文件,版本将是 2。
您的 svn 存储库将是 300mb。
如果您喜欢版本 1 中的文件,则必须 svn co -r 1 svnrepourl
我知道这个问题有点过时,但在我的公司,我们一直在尝试类似的东西。我们一直在提取大约 300 MB 大小的 xml 格式的备份(不是来自 MySQL,但仍然是简单的文本文件),并将它们提交到 SVN 存储库,每晚一个多星期。第一次提交将存储库设置为 41 MB,但此后的每次提交都较小。我们现在处于修订版 8,存储库的总大小只有 57 MB。这大约是它包含的所有历史大小的 2.5%!
我刚刚使用相同的数据尝试了 rdiff-backup;下面是一个比较(所有大小以 MB 为单位):
看起来增量大致相同(有时 svn 更好,有时 rdiff-backup 更好),所以在整体大小上,SVN 获胜。rdiff 的一个优点是可以轻松删除旧备份,而使用 SVN,您必须执行svnadmin dump和svnadmin load才能删除旧版本。我想这是一个偏好问题,但 SVN 易于使用,并且有大量的工具可以支持它。
查看此脚本,它可以自动执行该过程,允许特定选择数据库和排除表 [免责声明我是作者] - http://mysql-svn-backup.redant.com.au/
Percona XtraBackup支持 MySQL 数据库的增量热备份。