核心是三步:写好备份脚本、配置免密ssh、设置cron定时任务;脚本需完成数据库导出、时间戳命名、scp传输及日志记录,ssh免密须在本地生成密钥并部署公钥至异地服务器authorized_keys,cron须用绝对路径调用脚本并验证执行日志。

核心是三步:写好备份脚本、配置免密 SSH、设置 cron 定时任务。关键不在命令多复杂,而在各环节衔接可靠——尤其 scp 不能卡在密码输入上。
备份脚本要包含完整流程
一个可用的脚本至少完成:导出数据库(或打包文件)→ 生成带时间戳的文件名 → 用 scp 传到异地服务器 → 清理本地临时文件(可选)。例如 MySQL 备份:
-
mysqldump 导出:用
-h指定数据库地址,-u和-p提供账号密码(生产环境建议用配置文件或 mysql_config_editor 避免明文) -
文件命名:用
date '+%Y%m%d-%H%M%S'保证每次备份不覆盖,比如appdb_20260730-021500.sql -
scp 传输:格式为
scp -P 端口 本地文件 用户@远程IP:目标路径,注意端口不是默认 22 时必须加-P -
加日志和判断:用
echo "$(date): backup done" >> /var/log/backup.log记录执行时间;用if [ $? -eq 0 ]; then ... fi判断上一步是否成功再执行下一步
必须配置 SSH 免密登录
定时任务里无法交互输密码,scp 必须走密钥认证。操作顺序不能错:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 在发起备份的这台机器(即本地服务器)上运行
ssh-keygen -t rsa -b 4096,全部回车跳过密码 - 把生成的公钥(
~/.ssh/id_rsa.pub)内容复制出来,登录到异地服务器,追加到~/.ssh/authorized_keys文件末尾(注意权限:chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys) - 测试:在本地服务器执行
ssh 用户@异地IP,能直接登录就说明成功;再试一次scp test.txt 用户@异地IP:/tmp/,不提示输密码即达标
定时任务用 crontab 设置
推荐用 crontab -e 编辑当前用户任务,避免修改系统级 /etc/crontab 带来权限风险:
- 格式是
分 时 日 月 周 命令,例如每天凌晨 2:15 执行:15 2 * * * /bin/bash /opt/scripts/db_backup.sh - 务必写全路径:
/bin/bash而不是bash,/opt/scripts/...而不是./...,cron 不读取用户环境变量 - 如果脚本需要 root 权限(如备份系统日志),用
sudo crontab -e编辑 root 的任务,或确保脚本本身有足够权限 - 验证是否生效:等一两分钟,运行
grep CRON /var/log/syslog(Ubuntu/Debian)或journalctl -u cron | grep backup(CentOS/RHEL)看有没有执行记录
异地服务器上建议做简单防护
备份目标不是“扔进去就行”,得防误删、防磁盘满、防覆盖:
- 在异地服务器上建专用目录,比如
/backup/webapp/,并设好属主和权限(chown backup:backup /backup/webapp; chmod 750 /backup/webapp) - 加个清理脚本定期删旧文件,例如只保留最近 7 天:
find /backup/webapp -name "*.sql" -mtime +7 -delete - 用
df -h /backup监控空间,配合 cron 每天检查一次,快满时发邮件或写日志提醒










