You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu 16.04下每月自动将Vultr VPS备份至本地机器?

实现Vultr Ubuntu 16.04 Server每月自动备份到本地Ubuntu机器

嘿,我来帮你搞定这个每月自动备份的需求!咱们一步步来,确保整个流程稳定、可靠,不用你手动操心。

一、先搞定SSH免密登录(关键前提)

要实现自动备份,首先得让本地机器能无密码连接到VPS——毕竟总不能每月手动输密码吧?

  1. 在你的本地Ubuntu机器上生成SSH密钥:
    ssh-keygen -t rsa -b 4096
    # 一路回车就行,别设置密钥密码,这样才能自动登录
    
  2. 把公钥传到VPS上:
    ssh-copy-id your_vps_username@your_vps_ip
    
  3. 测试免密登录:
    ssh your_vps_username@your_vps_ip
    
    如果不用输密码就能进入VPS,这一步就搞定了。

二、在VPS上编写备份脚本(数据库+项目文件)

1. 数据库备份(以MySQL/MariaDB为例)

先在VPS上创建备份存储目录:

mkdir -p /var/backups/mysql

然后创建数据库备份脚本/usr/local/bin/backup_mysql.sh:

#!/bin/bash
# 替换成你的数据库信息
DB_USER="your_db_username"
DB_NAME="your_database_name"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d)

# 导出数据库并压缩
mysqldump -u $DB_USER $DB_NAME | gzip > $BACKUP_DIR/db_backup_$DATE.sql.gz

# 自动删除3个月前的旧备份,节省空间
find $BACKUP_DIR -name "db_backup_*.sql.gz" -mtime +90 -delete

重要提示:如果数据库需要密码,绝对不要在脚本里明文写!可以在VPS的~/.my.cnf里配置:

[mysqldump]
user=your_db_username
password=your_db_password

然后设置文件只读权限,防止泄露:chmod 600 ~/.my.cnf

给脚本加可执行权限,然后手动测试:

chmod +x /usr/local/bin/backup_mysql.sh
/usr/local/bin/backup_mysql.sh

去/var/backups/mysql目录看看有没有生成压缩的备份文件。

2. 项目文件备份

同样先创建文件备份目录:

mkdir -p /var/backups/project

创建项目备份脚本/usr/local/bin/backup_project.sh:

#!/bin/bash
# 替换成你的项目根目录
PROJECT_DIR="/path/to/your/project"
BACKUP_DIR="/var/backups/project"
DATE=$(date +%Y%m%d)

# 压缩项目文件,排除不需要备份的目录(比如依赖包、日志)
tar -czf $BACKUP_DIR/project_backup_$DATE.tar.gz \
    --exclude="$PROJECT_DIR/node_modules" \
    --exclude="$PROJECT_DIR/logs" \
    $PROJECT_DIR

# 自动删除3个月前的旧备份
find $BACKUP_DIR -name "project_backup_*.tar.gz" -mtime +90 -delete

加权限并测试:

chmod +x /usr/local/bin/backup_project.sh
/usr/local/bin/backup_project.sh

3. 合并备份脚本(可选)

如果想一键执行两个备份,可以创建/usr/local/bin/full_backup.sh:

#!/bin/bash
/usr/local/bin/backup_mysql.sh
/usr/local/bin/backup_project.sh

加可执行权限:

chmod +x /usr/local/bin/full_backup.sh

三、本地机器定时拉取备份文件

现在让本地机器每月自动触发VPS的备份,再把文件拉回来。

1. 创建本地备份存储目录

mkdir -p /home/your_local_username/backups/vps

2. 编写拉取脚本/usr/local/bin/pull_vps_backups.sh

#!/bin/bash
VPS_USER="your_vps_username"
VPS_IP="your_vps_ip"
LOCAL_BACKUP_DIR="/home/your_local_username/backups/vps"
DATE=$(date +%Y%m%d)

# 拉取数据库备份
scp $VPS_USER@$VPS_IP:/var/backups/mysql/db_backup_$DATE.sql.gz $LOCAL_BACKUP_DIR/

# 拉取项目文件备份
scp $VPS_USER@$VPS_IP:/var/backups/project/project_backup_$DATE.tar.gz $LOCAL_BACKUP_DIR/

# 本地保留最近6个月的备份,自动清理更早的
find $LOCAL_BACKUP_DIR -name "*.gz" -mtime +180 -delete

加可执行权限:

chmod +x /usr/local/bin/pull_vps_backups.sh

3. 设置cron定时任务

编辑本地机器的cron表:

crontab -e

添加以下两行,设置每月1号凌晨自动执行:

# 每月1号凌晨2点触发VPS执行全备份
0 2 1 * * ssh $VPS_USER@$VPS_IP /usr/local/bin/full_backup.sh
# 凌晨2点30分拉取备份到本地(给VPS足够的备份时间)
30 2 1 * * /usr/local/bin/pull_vps_backups.sh

保存退出后,cron会自动生效。可以查看日志确认:

tail -f /var/log/syslog | grep CRON

四、额外的安全与验证建议

  • 定期检查备份完整性:每月备份后手动打开一个备份文件,确认数据没损坏。
  • 测试恢复流程:偶尔拿备份文件恢复一次数据库和项目,确保备份真的能用。
  • 加密敏感数据:如果数据涉及隐私,可以用gpg加密备份文件后再传输。
  • 用rsync替代scp:如果备份文件很大,rsync更高效(只传输变化的部分),把scp命令换成:
    rsync -avz $VPS_USER@$VPS_IP:/var/backups/mysql/db_backup_$DATE.sql.gz $LOCAL_BACKUP_DIR/
    

内容的提问来源于stack exchange,提问作者VJ Ranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:29:40