使用 Subversion 进行增量 MySQL 备份

使用 Subversion 进行增量 MySQL 备份

我们的 MySQL 数据库服务器托管几十个数据库,转储文件大小从 1 到 ~100 MB 不等。

目前,我们的备份方法是mysqldump,包装在 shell 脚本中,并从 crontab 运行。这对我们来说非常有效。唯一的主要缺点是存储转储文件需要很大的存储空间。

由于 MySQL 数据库转储是文本文件,我自然会考虑将其存储在版本控制系统中,例如 Subversion。我记得 Subversion 只存储每次提交时文件的增量。

这种方法值得推荐吗?我们应该注意哪些问题?

答案1

SirStan 提到的 binlog 是一种很好的方法。

或者你可以运行 mysqldumps 然后使用rdiff-备份创建转储文件的备份。rdiff 将保留最后的 n 个备份 [ 您决定多少 个 ],并且非常节省空间,因为它只保留文件的最新版本 + 差异集的完整快照,从而允许它重建以前的版本。

无论您在 svn 中放入什么,它都会保留在 svn 中。存储库只会增长 - 因此它是保存您的 sql 模式、源代码和文档的好地方;但不是来自 sql 的实际数据。

答案2

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 - 数据库备份程序”。

答案3

使用svn会占用大量空间。

假设您提交了 100mb 的文件并且 svn 成为版本 1,那么如果您添加一个 200mb 的新文件,版本将为 2。

您的 svn 存储库将为 300mb。

如果你想要版本 1 的文件,你必须 svn co -r 1 svnrepourl

答案4

查看此脚本,它可以自动化该过程,允许特定选择数据库并排除表[免责声明我是作者] -http://mysql-svn-backup.redant.com.au/

相关内容