XtraBackup 和 rsync 有什么区别?

ran*_*omx 11 mysql backup percona

是的,我将在他们两个上运行 strace ......但是,我想知道......

  • XtraBackup 在 rsync -ac src dest 之上做了什么?
  • XtraBbackup 有什么特别之处?
  • XtraBackup 如何与 mysqld 交互?

Rol*_*DBA 16

rsync只是从一个地方到另一个地方的数据的逐字节暴力复制。您将执行多次 rsync,直到最后一次 rsync,这非常快。然后,您将完全关闭 MySQL 并再执行一次 rsync。

XtraBackup是一个综合性工具,其行为类似于 rsync,但在生活中具有指导意义。它可以从复制所有 InnoDB 数据和表空间开始。它能够在内部创建检查点并执行就地 InnoDB 崩溃恢复,以帮助获得完美的时间点备份。XtraBackup 还具有允许创建增量备份的额外功能。另一个附加功能是创建 InnoDB 日志文件,也是由就地崩溃恢复构建的。还有一些包装软件也可以提供 MyISAM 表的冻结复制。

这两种方法都很棒。XtraBackup 只是在大多数初始复制中实现了 InnoDB 事务功能。Xtrabackup 创建的文件可以放入已建立的 MySQL 基础架构中。公平地说,XtraBackup 提供了工具备份和物化的、非常有用的 InnoDB 文件。

使用 rsync 强制您多次管理复制过程,并通过关闭 mysql 来关闭它以需要 rsync 的一次干预。

使用一个而不是另一个可能是个人偏好。必须承认一件事:XtraBackup 进行的备份比复制的数据要大一些。我把方法的选择留给这个问题的读者。

我更喜欢 rsync 因为它使用简单,我可以在进程开始之前确定具体的时间点,我也可以完全控制锁定或关闭 mysqld,何时可以执行此类控制,以及以我指定的任何顺序.

两种备份风格有一个共同点:使用 XtraBackup,实际时间点是一个移动目标,直到备份过程完成,您必须信任 XtraBackup(嘿,到目前为止下载了 200,000 次。Facebook 是最大的用户之一)它。它赢得了很多信任)。换句话说,如果我在午夜启动 XtraBackup 并且备份持续到凌晨 2:20,那么备份的实际时间点是凌晨 2:20。使用 rsync 具有相同的移动目标问题,因为您必须手动执行多个 rsync,然后在最终 rsync 之前确定何时发出“service mysql stop”。

这些方法的不同之处在于必须使用 rsync 方法关闭 mysqld,而 XtraBackup 独立于 mysqld 起作用。实际上,XtraBackup 与 mysqld 的交互并不多,除非通过包装器软件处理 MyISAM 表。XtraBackup 尝试使用独立于 mysqld 的 InnoDB 存储引擎操作来构建功能齐全的 InnoDB 数据和日志文件。

关闭mysql对于rsync方法来说是非常必要的,一个非常大的原因:InnoDB Buffer Pool可以容纳“脏页”,即没有写回磁盘的数据和索引页(1页=16KB)。使用 rsync 不会捕获 InnoDB 缓冲池中挂起的数据更改。要为最终 rsync 加速关闭 mysqld,请运行以下命令:

SET GLOBAL innodb_max_dirty_pages_pct = 0;
Run Code Online (Sandbox Code Playgroud)

此命令会将脏页的数量保持在最低限度。此命令应该在您执行备份的 rsync 方法之前大约一小时运行。这甚至可能对 XtraBackup 也有帮助,尽管 XtraBackup 不需要关闭 mysql。