Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

那是2019年7月12日,我记得特别清楚。我的一个VPS提供商突然倒闭,服务器直接关机,没有任何预警。
损失清单:
最糟糕的是:我没有备份。我以为”大公司不会倒闭”,以为”数据很安全”。那天我学到的最贵的一课就是:如果你只有一份数据,那等于没有数据。
任何重要数据都要有至少三份完整副本:一份主数据,两份备份。
备份要保存在两种不同的存储介质上:比如硬盘+云存储,或本地+远程。
至少有一份备份要离线保存,与网络隔离,防止被勒索软件加密。
听起来很复杂?别担心,下面我会给你具体的、可操作的方案,从简单到全面,总有一款适合你。
如果你刚开始,先从这个最简单的方案开始:手动打包重要文件。
# 2. 备份数据库(MySQL/MariaDB)
mysqldump -u root -p –all-databases > /backup/database_$(date +%Y%m%d).sql
# 3. 备份配置文件(Nginx、PHP、系统配置)
tar -czf /backup/configs_$(date +%Y%m%d).tar.gz /etc/nginx /etc/php /etc/mysql
# 4. 将备份文件下载到本地(在本地电脑执行)
scp -P 你的端口 root@服务器IP:/backup/*.tar.gz ~/本地备份目录/
scp -P 你的端口 root@服务器IP:/backup/*.sql ~/本地备份目录/
优点: 简单,不需要安装额外软件
缺点: 手动操作,容易忘记,不适合经常更新的网站
rsync是Linux备份神器,只传输变化的文件,节省时间和带宽。
# 备份目录设置
BACKUP_DIR=”/backup/$(date +%Y%m%d)”
mkdir -p $BACKUP_DIR
# 1. 使用rsync备份网站文件(保留权限和时间戳)
rsync -avz –delete /var/www/html/ $BACKUP_DIR/website/
# 2. 备份数据库
mysqldump -u root -p你的密码 –all-databases > $BACKUP_DIR/database.sql
# 3. 备份重要配置
rsync -avz /etc/nginx/ $BACKUP_DIR/configs/nginx/
rsync -avz /etc/php/ $BACKUP_DIR/configs/php/
rsync -avz /etc/mysql/ $BACKUP_DIR/configs/mysql/
# 4. 打包备份(可选)
tar -czf /backup/full_backup_$(date +%Y%m%d).tar.gz $BACKUP_DIR
# 5. 删除7天前的备份(避免占满磁盘)
find /backup -name “*.tar.gz” -mtime +7 -delete
find /backup -type d -name “202*” -mtime +7 -exec rm -rf {} \;
使用方法: 给脚本执行权限 chmod +x /root/backup.sh,然后手动运行测试。
使用cron定时任务,让系统自动备份,你只需要定期检查备份是否正常。
# 2. 添加以下行(每天凌晨2点执行备份)
0 2 * * * /root/backup.sh > /var/log/backup.log 2>&1
# 3. 每周一凌晨3点执行完整备份并发送到远程服务器
0 3 * * 1 /root/full_backup.sh && scp /backup/full_backup_*.tar.gz 用户@远程服务器:/远程备份目录/
在同一服务器上备份,防止误删除、误修改。这是最基本的防线。
实现: 每日自动备份到 /backup 目录,保留7-30天。
备份到另一台服务器或云存储,防止服务器完全损坏。
实现: 每周将备份文件同步到另一台VPS、AWS S3、Google Drive等。
完全离线的备份,防止勒索软件、黑客攻击。
实现: 每月将重要数据备份到移动硬盘,断开连接保存。
没有经过恢复测试的备份,等于没有备份。很多人在恢复时才发现备份文件损坏或不完整。
建议: 每季度做一次恢复演练,确保真的能用。
在新的或干净的服务器上安装必要的软件(Nginx、MySQL、PHP)
复制配置文件到 /etc/ 相应目录,根据新服务器调整配置
当你需要更换VPS提供商、升级配置,或者当前服务器有问题时,就需要迁移。
# 同步数据库(导出再导入)
# 在旧服务器:
mysqldump -u root -p –all-databases > /tmp/all_databases.sql
# 在新服务器:
scp -P 端口 root@旧服务器IP:/tmp/all_databases.sql /tmp/
mysql -u root -p < /tmp/all_databases.sql
BorgBackup可以进行去重压缩,节省大量存储空间。
# 初始化备份仓库
borg init –encryption=repokey /backup/borg-repo
# 创建备份
borg create –stats –progress /backup/borg-repo::website-{now} /var/www/html
# 列出所有备份
borg list /backup/borg-repo
# 恢复备份
borg extract /backup/borg-repo::website-20240101
# 备份脚本中添加上传到S3
#!/bin/bash
BACKUP_FILE=”/backup/full_$(date +%Y%m%d).tar.gz”
tar -czf $BACKUP_FILE /var/www/html /etc/nginx
aws s3 cp $BACKUP_FILE s3://你的桶名/backups/
aws s3 ls s3://你的桶名/backups/
数据无价,备份有方。
今天花1小时建立备份系统,未来可能节省100小时的痛苦和数据损失。
现在就开始行动吧!