服务器备份手册

三种办法,选一种照着做
本站的机器最短 1 个月、最长 2 个多月就会到期重置, 到期时机器和上面的数据一并清空,我们也恢复不了。 你自己那台的到期时间在「我的机器」里能看到。

下面三种办法,选一种做完就行,不用都做。 拿不准就选办法一 —— 它最简单,覆盖大多数情况。

第一步 先想清楚要备份什么

整机备份既慢又占地方,而且恢复的时候你还是得重装一遍系统。 真正需要留下来的通常只有三类东西:

要备份的一般在哪
你的网站 / 程序文件/var/www、/opt、/home
数据库MySQL / PostgreSQL,要导出,不能直接拷文件
配置文件/etc/nginx、/etc/systemd/system、各种 .env
数据库千万别直接拷数据目录。数据库正在运行时那些文件是写到一半的,拷回去很可能起不来, 而且你要到恢复那天才会发现。一定要用 mysqldump 这类导出命令。

办法一 打包下载到自己电脑

最简单,适合数据不大、变化不频繁

在服务器上把要留的东西打成一个包:

tar czf ~/backup-$(date +%Y%m%d).tgz \
    /var/www /etc/nginx /opt/myapp

有 MySQL 的话,先导出再一起打包:

mysqldump -u root -p --all-databases > ~/db-$(date +%Y%m%d).sql
tar czf ~/backup-$(date +%Y%m%d).tgz \
    /var/www /etc/nginx ~/db-$(date +%Y%m%d).sql

然后在自己电脑上(不是在服务器上)执行,把它拉回来:

scp -P 端口号 root@你的IP:~/backup-*.tgz .

Windows 用户不想敲命令的话,用 WinSCP 或者 FileZilla, 填 IP、端口、用户名密码连上去,把文件拖回本地就行。

这个办法要你自己记得做。建议现在就在手机上设个每周提醒, 比「我记得的」靠谱。

办法二 自动同步到网盘

设置一次就不用管了,推荐

用 rclone 把备份自动传到你的网盘(Google Drive、OneDrive、 对象存储都支持)。设置一次,以后每天自动跑。

1. 装 rclone:

curl https://rclone.org/install.sh | sudo bash

2. 连你的网盘,按提示一路选(新手全按默认回车,到授权那步会给你一个网址, 在浏览器里打开登录一下):

rclone config

3. 建一个备份脚本 /root/backup.sh, 把里面的路径和网盘名字换成你自己的:

#!/bin/bash
set -e
D=$(date +%Y%m%d)
mysqldump -u root -p'你的数据库密码' --all-databases > /tmp/db-$D.sql
tar czf /tmp/backup-$D.tgz /var/www /etc/nginx /tmp/db-$D.sql
rclone copy /tmp/backup-$D.tgz 网盘名字:vps-backup/
rm -f /tmp/backup-$D.tgz /tmp/db-$D.sql
# 只留最近 14 天的
rclone delete --min-age 14d 网盘名字:vps-backup/

4. 给它执行权限,先手工跑一次确认能成:

chmod +x /root/backup.sh && /root/backup.sh

5. 跑通了再加到定时任务里。执行 crontab -e,在最后加一行 (每天凌晨三点跑):

0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1
第 4 步一定要先手工跑一次。直接扔进 cron 的话, 就算它天天失败你也不会知道 —— cron 出错默认不会通知任何人。

办法三 让另一台机器来拉

适合有两台以上服务器的人

在另一台不会到期的机器上定时把这台的数据拉过去。 好处是这台机器就算突然没了,备份也不在它身上。

在那台机器上执行:

rsync -avz -e "ssh -p 端口号" \
    root@这台的IP:/var/www/ /backup/vps-www/

同样加进 crontab -e 就能每天自动跑。 先配好 SSH 密钥登录,否则 cron 里跑会卡在输密码那步。

最后一步 验一次能不能恢复

这一步最多人跳过,也最要命
没验过的备份不算备份。备份天天在跑、文件也一直在长,但真到恢复那天才发现打包时漏了一个目录、 或者数据库导出的是空的 —— 这种事非常常见。

花十分钟验一遍,以后就能安心了:

  1. 把备份包下载到自己电脑,解开看看
  2. 确认网站文件、数据库导出、配置文件三样都在里面
  3. 打开那个 .sql 文件看一眼,里面应该有 INSERT INTO 这样的内容, 而不是只有几行注释

更彻底的做法是买一台最便宜的机器,把备份恢复上去跑一遍。 如果这台机器上跑的是你的正经生意,这十几块钱值得花。

到期那天要做什么

  1. 到期前手工再跑一次备份,确保拿到的是最新的
  2. 在本站重新下一单,开一台新机器
  3. 把备份传到新机器上,装好环境,把数据恢复回去
  4. 域名解析改到新 IP
想少一次折腾的话,在旧机器到期前几天就把新机器开好, 两台并行跑几天,确认新的没问题再切域名。这样中间不会断服务。

搞不定?直接找站长

上面这些自己弄不来,或者需要大容量、长期稳定、批量采购的, 直接联系,免费提供技术支持,价格也可以谈。

邮箱 freedomchina2099@gmail.com