我目前正在调查一个mysql备份解决scheme,以在一些生产服务器上实现。
读了一段时间后,我得出结论,最好的解决scheme是使用主/从方法来实现mysql复制。
老实说,考虑到我真正的需求,一旦简单的数据库转储就足够了,可能有点矫枉过正。
所以,我会尝试通过rsync和mysqldump来实现一个备份解决scheme。
一旦数据库的大小不是很大(ibdata1的大小是42MB,mysqldump命令执行速度很快,生成一个6.7M的转储文件)和数据库访问都相当的减less了,使用mysqldump就足够安全了在工作期间,select单一交易 ?
采用这种方法,configuration一个cron任务可以在白天进行2-3次转储。 如果我是正确的, -single-transaction选项的用法授予一些数据的完整性。
预先感谢所有的帮助,关心
对于InnoDB表,–single-transaction将确保每个表的转储是一致的,但它不一定与其他表保持一致,因为它一次一个地locking和转储它们,而不是locking所有的持续时间的倾倒。 当然,如果在转储过程中尝试写入表格,则会延迟写入,等待locking释放。
更好的办法是使用一个LVM或文件系统,允许你拍摄快照,然后locking整个数据库足够长的时间来拍摄快照,然后你就可以随时备份。
对于我来说,很难说出来:你的站点的访问模式,数据库,数据库stream量,或者你期望数据库得到多大。 如果你没事的话会有任何forms的locking,我会说。
我处于超出典型使用范围的任何locking都是不可接受的环境,我们的数据库大约为750GB。 我们所做的就是创build一个LVM快照,然后从快照中运行一个mysqldump。 当然,在快照期间我们会得到一些降级的性能,但是它比完全locking表要好。
mysqldumplocking了一个正在备份的数据库,所以你应该考虑使用一个像xtrabackup
这样的活动备份工具。 您将需要使用Percona的MySQL构build并将所有表转换为InnoDB。 来自Oracle的最新InnoDB插件也支持实时备份,不能记住他们的实时备份工具的名称。
我认为MySQL复制是一个不错的select。 Mysql在提交事务后生成新的日志。 所以,只要您正确使用交易,您将拥有一致的备份。
一开始就有一个完整的备份,然后你可以通过复制系统获得生成的二进制日志。 应用二进制日志文件应该以一致的方式更新数据库。
这总是可以使用的。 但是,使用系统快照的选项可能不可行,因为它与您正在使用的文件系统有关。