通过 rsync 传输 InnoDB 数据库

smu*_*che 2 mysql innodb rsync

我们正在切换到新的 RAID 阵列,需要将我们的 MySQL InnoDB 数据库复制到新的 RAID 阵列,同时最大限度地减少停机时间(50GB 数据库)。我知道在正在运行的 MySQL 数据库上使用 rsync 不会生成数据库的可用副本。但是,我可以通过在正在运行的数据库上使用 rsync,然后完全关闭 mysqld 并运行最终的 rsync 来获得精确的副本吗?在这种情况下是否有任何数据损坏的可能性,如果我确保 mysql 没有在运行最终 rsync 的情况下运行?

vor*_*aq7 6

您所描述的应该有效,但是我对使用文件系统级备份备份任何数据库的建议是,除非数据库供应商批准了执行其他操作的程序,否则您需要在执行文件系统级备份之前停顿数据库(这意味着“关闭该死的东西”)。

您所做的将利用rsync的增量传输,并在稍短的时间内有效地复制“关闭”数据库,因为它只是增量复制更改的部分。

与任何程序一样,在生产环境中执行此操作之前,您可能需要设计一个测试用例(创建一个 MySQL 实例和一个数据库,备份它,进行一些更改,关闭它,进行最后的同步并确保它正常工作在克隆的盒子上)。

  • 这正是我多年来所做的。除了您的答案中的内容之外,我通常将 innodb_max_dirty_pages_pct 保持为 0,以便 InnoDB 缓冲池的刷新速度更快。这样,需要担心的 rsync 减少了 1 或 2 个,并且可以更快地关闭 mysql 以适应最终的 rsync。+1为此!!!顺便说一句,设置 innodb_max_dirty_pages_pct 对于 MySQL 5.5 不是必需的,因为 InnoDB 缓冲池刷新得更好更快。 (4认同)