今儿个真开心!机房里的风扇像喝了五桶能量饮料,嗡嗡地转得飞起,我跟它一起蹦跶——因为终于轮到我把那堆“老伙计”们搬到新服务器啦!别看它们平时灰头土脸,一个个可是陪我熬夜写代码、抢红包、打补丁的功臣。今天,我要给它们办一场风风光光的“乔迁宴”!
第一步,先把“户口本”翻出来——也就是软件清单。我把每个程序的名字、版本、配置文件、许可证都抄在一张金光闪闪的表格上,像给老朋友写请柬:亲爱的××软件,您于××年××月××日入住旧机,如今新房已装修完毕,特邀您携家属(数据库、日志、缓存)光临新府,签到时请出示身份证(序列号)哦!
第二步,打包行李。我掏出自制“百宝囊”——一个带压缩算法的备份脚本。它像贪吃蛇一样,把文件夹一口一口吞进去,边吞边喊:“这坨日志太大,嚼三口;那坨图片太碎,先压成饼!”不到十分钟,几十G的行李变成了苗条的小包裹,排排躺进移动硬盘,像一群乖巧的小学生。
第三步,运镖。我把硬盘塞进防震盒,再裹三层泡泡纸,活像给它穿了羽绒服。下楼时遇到保安大叔,他瞅瞅我怀里鼓鼓囊囊的包裹,问:“送快递?”我嘿嘿一笑:“不,送梦想!”
第四步,新房迎宾。新服务器闪着蓝光,像夜店里的霓虹灯。我先把操作系统装点得漂漂亮亮——补丁打满、驱动装齐、防火墙端好小板凳。接着把行李搬进来:解压、校验、权限、环境变量,一条龙服务。每成功启动一个服务,我就给它发一朵小红花,不一会儿,屏幕上开满了“服务运行中”的小红花,喜气洋洋。
第五步,回滚演练。我假装手滑,把主数据库的表“啪”地删了一列。心跳刚要飙升,却见备份脚本悠哉地伸出援手:“兄弟莫慌,快照在此!”十秒钟后,数据原样归来,像时光倒流。我乐得原地转圈,差点把咖啡洒在机柜上——这可是我提前准备的“灾难派对”,专门测试备份靠不靠谱。
最后一分钟,我把旧机房的电源一盏盏熄灭,像在跟老友挥手。风扇慢慢停转,仿佛打了个满足的嗝。我朝它敬了个礼:谢谢陪伴,咱们江湖再见!转身奔向新机房,蓝光映在脸上,像胜利的舞台灯。此刻,我只想大喊:软件搬家,圆满收官!备份在手,天下我有!
————————教程分割线————————
软件迁移备份·手把手教学
目标:把旧服务器上的所有软件、数据、配置安全完整地搬到新服务器,并确保能快速回滚。
步骤一:盘点资产
列出所有运行中的服务(Nginx、MySQL、Redis…)。
记录版本号与安装路径:
nginx -v
mysql --version
收集配置文件路径:/etc/nginx/nginx.conf、/etc/my.cnf 等。
导出许可证或序列号到 license.txt。
步骤二:创建备份
系统级:用 rsync 做全量镜像
rsync -aAXv --exclude={/dev,/proc,/sys,/tmp,/run,/mnt,/media,/lost+found} / /mnt/backup/rootfs/
应用级:
• 数据库:mysqldump -u root -p --all-databases > all.sql
• Redis:redis-cli BGSAVE,完成后复制 /var/lib/redis/dump.rdb
• 网站目录:tar czpf web.tar.gz /var/www
验证备份完整性:
md5sum *.tar.gz *.sql > checksum.md5
md5sum -c checksum.md5
步骤三:环境预配
新服务器安装同版本操作系统。
按旧清单安装依赖,保持小版本一致:
yum install nginx-1.20.1 mysql-community-server-8.0.26
创建同名用户与权限:
useradd -u 1001 www
groupadd -g 1002 dev
步骤四:恢复与校验
恢复系统配置:
rsync -aAXv /mnt/backup/rootfs/etc /etc
导入数据:
mysql < all.sql
systemctl restart redis && redis-cli ping
比对配置文件差异:
diff -u /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
步骤五:回滚演练
创建定时快照(LVM/Btrfs/ZFS):
lvcreate -L10G -s -n snap_root /dev/vg0/root
模拟故障:删除 /var/lib/mysql 下任意表。
回滚:
umount /var/lib/mysql
lvconvert --merge /dev/vg0/snap_root
reboot
验证数据一致性:mysqlcheck --all-databases。
步骤六:切换流量
内网 DNS 或负载均衡指向新 IP。
观察 30 分钟日志无异常后,下线旧机。
保留旧机 7 天作为冷备。
Tips
• 全程用 screen/tmux,防止 SSH 中断。
• 备份脚本加 set -euo pipefail,出错即停。
• 异地再存一份备份到对象存储(如 S3),防火防盗防猫踢。
照此六步走,搬家再也不是“修罗场”,而是“欢乐颂”!