MySQL备份 – 增量

我知道你可以使用mysqldump。 我目前倾倒的方式如下:

${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE 

从我的理解,这locking数据库,并防止任何types的数据库的使用,甚至可以locking网站。 如果数据库的大小在100mbs甚至1gbs,那么有没有更好的方法可以做每日/每小时的MySQL数据库备份

你可能想要:

  • (理想情况下)每隔一段时间采取非阻塞的完整备份[取决于您的数据更改率和恢复stream程的速度要求] – 例如每天或每周一次
  • 经常备份可以用来进行时间点恢复的MySQL二进制日志备份。 您可以将这些日志视为增量 – 完成备份后发生的操作列表

为了使备份成为非阻塞,您需要将InnoDB引擎用于所有表。

对于替代scheme – 不捆绑MySQL的解决scheme – 请看看:

  • xtrabackup – 这是一个采取MySQL的完整/增量备份的替代方法。
  • lvm [或其他存储级别]快照 – 例如这个脚本

这只会lockingMyISAM表。 --single-transaction只能通过在事务中运行它来防止表locking。

100MB到1GB实际上是一个很小的尺寸,所以,如果你可以忍受不一致的机会,你可以添加--skip-lock-tables ,也可以避免lockingMyISAM表。 这样你的网站不会受到影响。

在有更新两个表的应用程序的情况下会发生不一致。 如果在备份这两个表之间发生这种情况,则备份可能包含对第二个表的更新,而不是第一个表。

这是一个罕见的情况,特别是如果你有一个小的数据库。 如果你不能忍受这一点,你可能需要使用更复杂的解决scheme,如lvm快照或使用复制。