服务器迁移前做全量快照备份,最推荐的做法是在业务低峰期停止应用和数据库服务,确保磁盘数据一致性后,通过云控制台或 API 触发磁盘快照。适用场景为云服务器实例迁移,风险边界在于快照期间磁盘 IO 可能受限,且快照不包含内存数据。
先说结论:云服务器迁移前必须创建磁盘快照,但需先停止写入服务以防数据损坏。
- 适合:阿里云、腾讯云、AWS 等支持云盘快照的云服务器实例。
- 先看:确认磁盘类型是否支持快照,检查剩余配额是否充足。
- 建议:快照完成后创建按量付费实例进行挂载验证,确认数据可读。
命令速用版
# 1. 强制同步内存缓存到磁盘
sync
# 2. 停止数据库服务(以 MySQL 为例)
systemctl stop mysqld
# 3. 停止 Web 服务
systemctl stop nginx
# 4. 再次同步确保落盘
sync
为什么会这样
直接创建快照而不停止服务会导致数据库文件损坏,因为操作系统缓存中的数据尚未写入磁盘。
文件系统为了保证性能,会将写入操作先放在内存缓存中,定期刷入磁盘。如果在缓存未刷入时创建快照,快照里的数据就是旧数据或不完整数据。数据库软件尤其敏感,非正常关闭可能导致事务日志不一致,恢复后无法启动。
分步处理
步骤 1:通知与准备
提前公告维护窗口,确认云账户快照配额足够。快照占用存储空间,配额不足会导致创建失败。
步骤 2:停止写入服务
登录服务器,按顺序停止对外服务和数据库。先停 Web 服务器切断流量,再停数据库确保事务提交。
步骤 3:执行同步命令
在终端执行 sync 命令,强制将内核缓冲区数据写入物理磁盘。观察命令执行完毕且无报错。
步骤 4:创建快照
在云控制台找到对应实例的系统盘和数据盘,选择“创建快照”。命名建议包含日期和用途,如 backup_20231027_migration。
步骤 5:恢复服务
快照状态变为“完成”后,重新启动数据库和 Web 服务,检查业务日志确认无异常。
怎么验证是否生效
登录云控制台查看快照列表,状态显示为“完成”或"Available"即表示快照可用。
更严格的验证方式是使用该快照创建一块新云盘,挂载到测试实例,运行 fsck 检查文件系统完整性,并尝试读取关键数据文件。
常见坑
- 忽略数据盘:只备份了系统盘,忘记挂载的数据盘也需要单独创建快照。
- 数据库未刷盘:仅停止服务未执行
sync,极端情况下仍有缓存数据丢失风险。 - 快照一致性组:多块磁盘场景下,如果没有使用“快照一致性组”,不同磁盘的快照时间点可能不一致,导致数据逻辑错误。
常见问题
快照备份会占用多少存储空间?
快照通常采用增量存储机制,首次全量快照占用空间与已用磁盘容量接近,后续快照仅存储变化数据。
创建快照期间服务器需要关机吗?
云服务器支持在线创建快照,但为了保证数据一致性,建议在业务层面停止写入,不需要强制关机。
快照能恢复内存里的数据吗?
不能,磁盘快照仅保存磁盘数据,内存中的数据在断电或重启后会丢失,需依赖应用层持久化。