换系统就像给房子“硬装”翻新,虽然地板墙皮全换了,但里面的家具、文件、水电线路配置可不能丢。在云服务器(无论是阿里云、腾讯云、华为云还是AWS等)环境下操作,核心原则只有一条:数据与配置分离备份。
很多新手容易犯的错误是只拷了代码,结果重装后发现数据库密码忘了、Nginx 配置文件丢了、或者 SSH 密钥对没了,导致服务起不来或者安全策略失效。
以下是按优先级排序的备份清单,建议你在执行 yum clean all 或 apt-get autoremove 之前,逐一核对:
1. 业务数据层(最高优先级,丢了就真没了)
这部分是公司的资产,必须确保有独立的存储卷挂载,或者定期同步到对象存储(OSS/COS/S3)。
- 数据库文件:
- MySQL/MariaDB:不要直接拷贝
/var/lib/mysql目录下的文件(InnoDB 引擎直接拷贝极易损坏)。请使用mysqldump导出 SQL 文件,或者使用 XtraBackup 做物理备份。如果是主从架构,记得确认从库状态。 - PostgreSQL:使用
pg_dumpall导出全量 SQL,或者备份/var/lib/postgresql/data目录(需停服后打包,风险较高,推荐逻辑备份)。 - Redis:如果依赖 RDB/AOF 持久化,确保备份了 dump.rdb 和 appendonly.aof 文件。如果是集群模式,注意节点配置。
- MongoDB/Elasticsearch:使用官方工具(如
mongodump/elasticdump)进行逻辑备份,避免直接复制数据目录。
- MySQL/MariaDB:不要直接拷贝
- 用户上传的文件/媒体资源:
- 图片、视频、附件等。强烈建议这些静态资源已经迁移到了 OSS/COS 或 NFS 共享存储。如果还在本地磁盘(如
/var/www/html/uploads),务必打包压缩备份。
- 图片、视频、附件等。强烈建议这些静态资源已经迁移到了 OSS/COS 或 NFS 共享存储。如果还在本地磁盘(如
- 日志文件:
- 应用日志(
/var/log/app/)、Web 访问日志(/var/log/nginx/或/var/log/apache2/)。虽然日志可以重新生成,但历史日志对于排查问题和审计很重要,建议归档保留。
- 应用日志(
2. 系统配置层(决定服务能否快速恢复)
这部分决定了你重装后,能不能用“一键脚本”把环境搭起来,而不是手动敲几百行命令。
- Web 服务器配置:
- Nginx:
/etc/nginx/nginx.conf以及conf.d/或sites-enabled/下的所有站点配置文件。 - Apache:
/etc/httpd/conf/httpd.conf及conf.d/下的配置。 - 技巧:如果你用了 Docker,备份
docker-compose.yml和.env文件即可,这是最干净的迁移方式。
- Nginx:
- 反向XX与负载均衡:
- 如果有 Haproxy、Keepalived 或 LVS 配置,务必备份
/etc/haproxy/或相关规则文件。
- 如果有 Haproxy、Keepalived 或 LVS 配置,务必备份
- 定时任务:
- 执行
crontab -l查看当前用户的定时任务,并记录到文件中。 - 检查
/etc/cron.d/、/etc/crontab以及系统级的 cron 配置。
- 执行
- 防火墙与安全组:
- 重要:云服务器通常有两层防火墙。
- 云平台安全组:在控制台截图或记录开放的端口(80, 443, 22, 3306 等)。
- 系统内部防火墙:如果是 CentOS 7+ 可能是
firewalld,Ubuntu 可能是ufw。备份规则:- Firewalld:
firewall-cmd --list-all > firewall-backup.txt - UFW:
sudo ufw status verbose并保存输出。 - iptables:
iptables-save > iptables-backup.txt
- Firewalld:
- 重要:云服务器通常有两层防火墙。
3. 身份认证与密钥(防止被锁在外面)
- SSH 密钥对:
- 如果你使用了公钥登录,确保本地有私钥文件的副本。
- 服务器上的
/root/.ssh/authorized_keys和/home/username/.ssh/authorized_keys内容要备份。
- SSL/TLS 证书:
- 备份
/etc/ssl/或/etc/letsencrypt/下的证书文件和私钥。私钥丢了意味着 HTTPS 白搭,必须重新申请。
- 备份
- 用户账号信息:
- 除了 root,是否有其他运维账号?备份
/etc/passwd和/etc/shadow(谨慎处理 shadow 文件,涉及密码哈希)。更推荐记录新增的用户名及其 sudo 权限配置。
- 除了 root,是否有其他运维账号?备份
4. 环境与依赖(提速重建过程)
- 软件源列表:
- CentOS:
/etc/yum.repos.d/下的所有.repo文件。 - Ubuntu:
/etc/apt/sources.list以及/etc/apt/sources.list.d/。 - 原因:国内镜像源经常变动,备份源列表可以避免重装后
yum install报错找不到包。
- CentOS:
- 已安装的软件版本列表:
- 执行
rpm -qa(CentOS) 或dpkg -l(Ubuntu),将输出重定向到文件。这有助于你在新系统中安装相同版本的依赖,避免兼容性问题。
- 执行
- 自定义环境变量:
- 检查
/etc/profile、/etc/bashrc、~/.bashrc、~/.profile中是否有自定义的PATH、JAVA_HOME、LANG等设置。
- 检查
5. 特殊场景补充
- Docker/Kubernetes:
- 如果是容器化部署,重点备份 Docker Volume 的数据、K8s 的 YAML 定义文件、ConfigMap 和 Secret。
- 备份
/var/lib/docker/下的镜像缓存(可选,因为可以从 Registry 拉取,但省流量)。
- PHP/Python/Node.js 项目源码:
- 确保你的代码仓库(Git)是最新的。如果代码不在 Git 管理下,直接打包项目目录。
- 备份
requirements.txt、package.json、composer.json等依赖描述文件。
实操建议:如何高效备份?
- 打包压缩:将上述所有配置文件打包成一个 tar.gz 文件。
tar -czvf backup-config-$(date +%F).tar.gz /etc/nginx/ /etc/crontab /var/log/nginx/ /root/.ssh/authorized_keys /etc/yum.repos.d/ ./my-app-database-dump.sql - 上传到异地:绝对不要只存在本机。通过
scp、rsync或ossutil将备份包上传到另一台机器、NAS 或对象存储桶中。 - 验证备份:尝试解压备份包,检查关键文件是否完整可读。
最后提醒
- 快照先行:在动手改任何东西之前,先在云控制台对当前磁盘打一个快照。这是最后的救命稻草。如果新系统配置错误导致无法启动,你可以随时回滚快照。
- 测试环境演练:如果条件允许,先用备份数据在一台新的测试服务器上模拟一次完整的重装和恢复流程,确认无误后再在生产环境操作。
记住,备份不是为了“以防万一”,而是为了“确保你能活下来”。祝迁移顺利!
云技术博客