云上 MySQL 快照与备份指南

将 MySQL 部署到云端后,完全可以对该实例进行快照。具体的操作方式和备份策略,主要取决于你是如何部署这个 MySQL 的:是使用云厂商的云数据库服务(如 AWS RDS、阿里云 RDS、腾讯云 CDB),还是自己在云服务器(如 EC2、ECS)上自行搭建。

下面为你梳理这两种场景下的快照与数据备份的具体操作方法。

场景一:使用云厂商的云数据库(RDS / 托管服务)

如果你使用的是云数据库(托管服务),云厂商已经将快照和备份功能深度集成到了控制台中,这是最省心的方式。

1. 如何进行快照(Snapshot)

云数据库的快照通常分为两种:

  • 自动快照: 云厂商每天会在你设定的低峰期自动对数据库进行全量快照,并按照你设置的保留天数(如 7 天、30 天)循环滚动删除。

  • 手动快照: 你可以在进行重大业务变更(如数据库升级、执行高风险 SQL)前,在云控制台手动点击“创建快照”。手动快照除非你主动删除,否则会永久保留。

快照的本质: 云数据库的快照通常是基于底层分布式存储的块级快照。在恢复时,它不是将数据导入现有实例,而是基于快照直接克隆出一个全新的数据库实例

2. 数据的备份与恢复

除了快照,云数据库还提供更细粒度的备份:

  • 日志备份(Binlog): 云数据库会自动实时将 MySQL 的二进制日志(Binlog)同步到对象存储(如 S3、OSS)。

  • 任意时间点恢复(PITR - Point-in-Time Recovery): 得益于“全量快照 + Binlog 日志”的组合,你可以在控制台选择恢复到过去 7~30 天内的任意历史秒级时间点

场景二:在云服务器(VM / ECS / EC2)上自建 MySQL

如果你是在云服务器上自己安装的 MySQL,那么快照和备份需要你(或运维脚本)来配合执行。

1. 如何进行快照(云盘快照)

你可以直接对云服务器挂载的云硬盘(Block Storage)进行快照。但在自建 MySQL 下执行云盘快照,需要特别注意数据一致性

  • 冷快照(最安全): 先停止 MySQL 服务 (systemctl stop mysqld),然后前往云控制台对云盘拍摄快照,完成后再启动 MySQL。这样能保证内存中的数据完全刷入磁盘。

  • 热快照(在线,需锁表): 如果业务不能停机,在拍快照的瞬间,MySQL 可能正在内存中缓存数据或写盘。为了防止快照读到“脏数据”导致恢复时数据库损坏,标准的做法是:

    1. 在 MySQL 中执行全局读锁:FLUSH TABLES WITH READ LOCK;(这会阻止写入,但允许读取)。

    2. 立即在云控制台触发云盘快照。

    3. 快照触发成功后(通常几秒钟,不需要等待快照进度到100%),在 MySQL 中释放锁:UNLOCK TABLES;

2. 如何进行常规数据备份

自建 MySQL 无法直接享受云数据库那种一键式的秒级恢复,你通常需要结合以下传统工具来做备份:

  • 逻辑备份(数据量小,小于 50G):

    使用 mysqldump 工具将数据导出为 .sql 文件。

    Bash

    mysqldump -u root -p --all-databases --single-transaction > all_databases.sql
    

    (注:--single-transaction 可以在 InnoDB 引擎下实现无锁的在线备份。)

  • 物理备份(数据量大,大于 50G):

    使用 Percona XtraBackup 工具。它可以在不锁表的情况下,直接复制底层的 .ibd 数据文件,备份和恢复速度比 mysqldump 快得多。

  • 备份自动化与云结合:

    建议编写 Cron 定时任务脚本,每天凌晨执行备份,并将备份生成的压缩包自动上传到云厂商的对象存储(如 AWS S3、阿里云 OSS)中。对象存储可以配置“生命周期管理”,自动清理 30 天前的旧备份,既安全又省钱。

总结:我该选哪种?

备份方式 优势 劣势 适用场景
云数据库快照 自动化、速度极快、支持秒级任意时间点恢复。 只能恢复成新实例,无法直接提取单张表。 生产环境、核心业务。
云服务器磁盘快照 速度快,适合自建数据库的整机灾备。 需要处理锁表/停机问题,否则可能导致数据不一致。 自建 MySQL 的系统级备份。
mysqldump / XtraBackup 备份文件灵活,可跨平台、跨机房恢复,支持单表恢复。 占用服务器自身算力和 I/O 资源,数据量大时恢复慢。 日常数据存档、开发测试环境导数据。

如果你的 MySQL 实例正在承载线上核心业务,强烈建议开启云数据库的自动备份策略;如果是自建 MySQL,则推荐采用 XtraBackup 物理备份 + 定时上传对象存储 的方案作为主力,并在重大变更前配合云盘快照作为双保险。