【问题标题】:Using VM to backup MySQL database使用虚拟机备份 MySQL 数据库
【发布时间】:2026-01-02 09:30:02
【问题描述】:

使用 vm 的备份作为恢复 MySQL 数据库的方法是否正确? 这样做有什么危险吗? 我自己的感觉是 vm 备份/快照位于 os 而不是 db 级别,因此可能无法以正确的方式备份数据库。有人对此有什么建议吗?

【问题讨论】:

    标签: mysql virtual-machine


    【解决方案1】:

    只要你做以下两件事之一就可以了:

    • 通过关闭数据库或在执行快照时使用 FLUSH TABLES WITH READ LOCK 之类的方法来确保表的一致性(您可能不想这样做
    • 使用事务安全的存储引擎,例如 InnoDB(默认),用于所有可能在快照时间前后发生变化的表,并依赖于其恢复能力从看起来像是崩溃的状态,即正在运行的服务器的副本。

    一旦您意识到拍摄正在运行的虚拟机的快照并在另一台机器上启动快照看起来就像拔掉该服务器上的插头并重新启动它,您的选择就变得相对容易:确保系统可以从拔掉插头中恢复,并且可以从虚拟机快照备份中恢复。

    【讨论】:

    • 您会建议将其作为长期数据库备份解决方案,而不是像 mysqldump 这样的专用数据库备份工具吗?此外,以崩溃恢复方式定期恢复数据是否存在数据损坏风险?感谢您对此的帮助。
    • 我不建议将其作为您的主要备份解决方案。我知道有人一直在这样做,但即使它是 99% 可靠的(而且我不知道它在你的环境中),这意味着每 100 个备份中就有 1 个是不可靠的,如果你创建一个快照一天两次,这意味着您每两个月至少接触一次。这就是为什么我说只要您乐于依赖 InnoDB 的(非凡的)恢复功能就可以了。快照备份有很大的好处(它既快速又简单),但它不像例如备份那样可靠。 mysqldump、MySQL 企业备份或 XtraBackup。
    • 感谢杰里米。
    【解决方案2】:

    根据 Jeff Hunter 在 VMWare blog 上发布的建议,答案是不,依靠快照进行 MySQL 备份是不安全的。他的建议基本上是通过单独的进程转储数据库(然后允许快照复制转储)。

    【讨论】: