Linux脚本自动备份跨境网站数据:新手也能入门的教程

为什么需要自动备份跨境网站数据

跨境网站通常部署在境外服务器上,数据安全与本地运维存在时差、网络不稳定等挑战。
手动备份容易遗忘,一旦遇到服务器故障或误删除,恢复成本极高。
通过Linux脚本自动备份数据,可以每天定时将网站文件和数据库压缩归档,并传输到本地或备用存储,实现零人工干预。
本文从零开始,教会你完整搭建一套自动备份方案。

准备工作:SSH密钥与目录结构

在执行脚本之前,需要确保本地服务器和远程跨境服务器之间能够免密码连接。
步骤如下:

  1. 在本地生成SSH密钥对(如果已有可跳过):
   ssh-keygen -t rsa -b 4096 -f ~/.ssh/cross_backup

一路回车,不设置密码短语。

  1. 将公钥上传到远程服务器
   ssh-copy-id -i ~/.ssh/cross_backup.pub root@your-remote-server-ip

如果无法使用ssh-copy-id,可以手动将公钥内容追加到远程服务器的~/.ssh/authorized_keys文件中。

  1. 测试连接
   ssh -i ~/.ssh/cross_backup root@your-remote-server-ip "echo connected"

看到connected即表示成功。

  1. 在本地规划备份目录:例如/data/backups/cross_site,并创建子目录dailylogs

编写备份脚本:自动打包并下载

以下脚本会远程打包网站文件和数据库,然后通过scp下载到本地,最后删除远程的临时压缩包。
创建文件/opt/scripts/cross_backup.sh,内容如下:

#!/bin/bash
# 跨境网站自动备份脚本

# 配置项
REMOTE_IP="your-remote-server-ip"
REMOTE_USER="root"
SSH_KEY="~/.ssh/cross_backup"

# 远程网站根目录(根据实际修改)
REMOTE_SITE_DIR="/var/www/html"
# 远程数据库信息
DB_NAME="your_db_name"
DB_USER="your_db_user"
DB_PASS="your_db_password"

# 本地备份根目录
LOCAL_BACKUP_DIR="/data/backups/cross_site"
DATE=$(date +%Y%m%d_%H%M%S)

# 远程临时打包
REMOTE_TAR="/tmp/backup_${DATE}.tar.gz"
REMOTE_SQL="/tmp/db_${DATE}.sql"

ssh -i ${SSH_KEY} ${REMOTE_USER}@${REMOTE_IP} << EOF
    # 备份数据库
    mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${REMOTE_SQL}
    # 打包网站文件和数据库
    tar -czf ${REMOTE_TAR} -C / ${REMOTE_SITE_DIR#/} ${REMOTE_SQL#/}
    rm -f ${REMOTE_SQL}
EOF

# 下载到本地
echo "正在下载备份..."
scp -i ${SSH_KEY} ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_TAR} ${LOCAL_BACKUP_DIR}/daily/backup_${DATE}.tar.gz

# 删除远程临时包
ssh -i ${SSH_KEY} ${REMOTE_USER}@${REMOTE_IP} "rm -f ${REMOTE_TAR}"

echo "备份完成:${LOCAL_BACKUP_DIR}/daily/backup_${DATE}.tar.gz"

赋予执行权限:chmod +x /opt/scripts/cross_backup.sh
首次运行建议手动执行一次,检查是否有错误。

设置定时任务:注意时区与日志

跨境网站可能涉及跨时区,使用crontab时建议统一成UTC+0或服务器所在的时区。
在本地服务器执行crontab -e,添加以下任务(假设每天凌晨3点备份):

0 3 * * * /opt/scripts/cross_backup.sh >> /data/backups/cross_site/logs/backup.log 2>&1
  • 时区问题:如果本地服务器和远程服务器时区不同,在执行脚本时远程打包的文件名中的时间戳基于远程,而下载后的本地时间可能不一致。建议在脚本中使用统一的时间源,例如获取远程时间或使用UTC。可修改脚本中的DATE=$(ssh -i ${SSH_KEY} ${REMOTE_USER}@${REMOTE_IP} "date -u +%Y%m%d_%H%M%S")获取远程UTC时间。
  • 日志保留:定期清理日志,避免磁盘占满。可在crontab中添加一条0 0 1 * * find /data/backups/cross_site/logs -mtime +30 -delete

避坑指南:常见问题与解决办法

  1. SSH连接超时或拒绝:检查远程服务器是否允许密钥登录(/etc/ssh/sshd_configPubkeyAuthentication yes),防火墙是否放行22端口。
  2. mysqldump权限不足:确保远程数据库用户具有SELECT、LOCK TABLES等权限,或使用root账号。生产环境建议创建专用备份用户。
  3. 打包路径错误:脚本中tar -czf ${REMOTE_TAR} -C / ${REMOTE_SITE_DIR#/},含义是以根目录为基准去除开头的/。如果网站目录是/var/www/html,则${REMOTE_SITE_DIR#/}var/www/html。确保路径正确。
  4. 磁盘空间不足:远程/tmp目录或本地备份目录空间不足会导致失败。建议设置空间报警或定期清理旧备份。
  5. 文件锁定问题:备份过程中如果网站有频繁写入,可能导致文件不一致。对于数据库,使用--single-transaction(InnoDB)或锁定表;对于文件,可在业务低峰期执行。

效果验证:确保备份可恢复

  1. 手动执行脚本/opt/scripts/cross_backup.sh,观察输出和日志文件。
  2. 检查备份文件:查看本地/data/backups/cross_site/daily/下是否生成backup_日期.tar.gz
  3. 模拟恢复:在测试环境解压备份文件,恢复数据库和网站文件,确认能正常访问。
  4. 检查crontab状态:使用crontab -l确认定时任务存在,查看日志文件/data/backups/cross_site/logs/backup.log是否每天有新的执行记录。

通过以上步骤,你的跨境网站数据即可实现每日全自动备份。
后续可以根据数据量调整备份频率、增加远程副本或云存储上传,进一步加固数据安全。
如果你在配置中遇到其他问题,欢迎在评论区留言交流。

分享到:
上一篇
网站收录缓慢服务器抓取诊断:网站收录缓慢怎么办?服务器抓取诊
下一篇
住宅主机搭建流媒体跨境展示站:从零开始的内网穿透教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意