博客 / Others/ 使用DropBox定时进行VPS备份的方案(非网页上传)

使用DropBox定时进行VPS备份的方案(非网页上传)

使用DropBox定时进行VPS备份的方案(非网页上传)

方案原理

本方案通过 Linux 系统的 cron 定时任务,执行脚本调用 Dropbox 客户端进行文件同步,实现 VPS 数据的定时备份。相比实时同步,定时同步可以节省服务器资源。

请注意,原文中提到的“自动备份Linux VPS/服务器网站/数据库并上传到FTP的脚本”是另一种更通用的方案,本方案则专注于利用 Dropbox 进行备份。

1. 在 Linux 上安装 Dropbox 客户端

首先,根据你的系统架构下载对应的 Dropbox 客户端。

32位 Linux 系统:

wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86"

64位 Linux 系统:

wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86_64"

下载完成后,解压文件:

tar xzvf dropbox.tar.gz

首次运行 Dropbox 守护进程以生成主机 ID 并进行账户关联:

~/.dropbox-dist/dropboxd &

运行后,终端会输出一个包含 host_id 的链接。复制此链接并在浏览器中打开,登录你的 Dropbox 账户即可完成当前机器与账户的绑定。

2. 建立备份目录的软链接

绑定账户后,你的用户主目录下会生成 ~/Dropbox 文件夹。你可以通过创建软链接(Symbolic Link)的方式,将需要备份的网站目录链接到 Dropbox 文件夹内。

cd ~/Dropbox
ln -s /home/wwwroot/html
ln -s /home/wwwroot/htdocs
# 可以继续为其他需要备份的目录创建软链接

创建完成后,启动 Dropbox 守护进程即可开始同步:

~/.dropbox-dist/dropboxd &

3. 配置定时同步脚本以节省资源

为了节省服务器资源,我们可以不进行 7x24 小时实时同步,而是通过 cron 定时启动和停止同步进程。

首先,停止当前运行的 Dropbox 进程:

pkill dropbox

然后,创建一个控制脚本,例如 /root/backup.sh

#!/bin/bash

# Dropbox 控制脚本
DROPBOX_PATH="/root/.dropbox-dist/dropboxd"

start() {
    echo "[$(date)] 启动 Dropbox 同步..."
    $DROPBOX_PATH &
}

stop() {
    echo "[$(date)] 停止 Dropbox 同步..."
    pkill -f "dropboxd"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 2
        start
        ;;
    *)
        echo "用法: $0 {start|stop|restart}"
        exit 1
        ;;
esac

exit 0

给脚本添加执行权限:

chmod +x /root/backup.sh

最后,编辑 crontab 定时任务,设定同步时间。例如,设定每天凌晨4点开始同步,5点停止:

crontab -e

在打开的编辑器中添加以下两行:

0 4 * * * /bin/bash /root/backup.sh start
0 5 * * * /bin/bash /root/backup.sh stop

提示: 同步时长应根据每日数据变化量调整。如果数据更新不多,同步10-30分钟可能就足够了。

4. 补充:MySQL 数据库备份脚本

除了网站文件,数据库也需要定期备份。以下是一个使用 mysqldump 备份 MySQL 数据库到 Dropbox 目录的脚本示例 (/root/bakmysql.sh):

#!/bin/bash

# 数据库配置
DB_NAME="your_database_name"      # 请修改为你的数据库名
DB_USER="your_database_user"      # 请修改为你的数据库用户名
DB_PASS="your_database_password"  # 请修改为你的数据库密码

# 路径配置
BACKUP_DIR="/root/Dropbox/mysql_backup"
LOG_FILE="/var/log/mysql_backup.log"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 生成备份文件名 (格式: db_年月日.sql.gz)
BACKUP_FILE="${BACKUP_DIR}/db_$(date +%Y%m%d).sql.gz"

# 执行备份
echo "--- 开始备份 [$(date +"%Y-%m-%d %H:%M:%S")] ---" >> $LOG_FILE

# 使用 mysqldump 备份并压缩
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "成功: 数据库已备份至 $BACKUP_FILE" >> $LOG_FILE
else
    echo "错误: 数据库备份失败!" >> $LOG_FILE
fi

# 删除7天前的旧备份 (可选)
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete >> $LOG_FILE 2>&1

echo "--- 备份结束 [$(date +"%Y-%m-%d %H:%M:%S")] ---" >> $LOG_FILE
echo "" >> $LOG_FILE

同样,给脚本添加执行权限并可以通过 crontab 定时运行,例如每天凌晨3点备份:

chmod +x /root/bakmysql.sh
# 在 crontab 中添加:
0 3 * * * /bin/bash /root/bakmysql.sh

5. 卸载 Dropbox 客户端

如果需要卸载 Dropbox,请按以下步骤操作:

# 1. 停止 Dropbox 进程
pkill dropbox

# 2. 删除相关文件和目录
rm -rf ~/.dropbox ~/.dropbox-dist ~/Dropbox dropbox.tar.gz
# 注意:删除 ~/Dropbox 会同时删除本地同步文件夹内的文件,请确保已备份重要数据。

发表评论

您的邮箱不会公开。必填项已用 * 标注。