使用Rclone定时备份MySQL到云存储

#server

最近在 blog 上新增了 2 个页面,见导航栏中的 delicious 和 memory。由于用到了 mysql,考虑到数据安全,还是得经常备份。之前就想试用 Rclone,所以这次就选择用 Rclone+box.com 的组合。有个缺点就是 box 的认证授权只有 60 天,每 2 个月就要手动刷新下 token。(看官方文档介绍,有的云存储 token 过期时间会很长如 pikpak)。

Mysql 数据库备份 sh 脚本

  • 创建备份 Mysql 数据库脚本
#!/bin/bash

# MySQL数据库信息
MYSQL_USER="xxxxxxxx"
MYSQL_PASSWORD="xxxxxxxx"

#提前手动创建好备份的目录
BACKUP_DIR="/tmp/backup"
REMOTE_NAME="remote"

# 定义备份文件的文件名
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.sql"

# 备份多个数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --databases delicious memory > "$BACKUP_FILE"

# 使用rclone上传备份到远程
rclone copy "$BACKUP_FILE" "$REMOTE_NAME:/backup/linode"

安装配置 Rclone

sudo -v ; curl https://rclone.org/install.sh | sudo bash
#开启交互式配置流程。可以全部都选 default
rclone config
  • 由于是在远程服务器上进行操作,所以在最后一步时,需要选择 No
Use web browser to automatically authenticate rclone with remote?
 * Say Y if the machine running rclone has a web browser you can use
 * Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.
y) Yes (default)
n) No
  • 然后在您的本地主机上访问以下链接: http://127.0.0.1:53682/auth
  • 然后回到服务器终端,在配置的最后一步 粘贴代码(授权代码是从本地主机浏览器中获取到的)
  • 配置完成。你就可以像这样使用rclone了。
#列出 Box 顶层的目录
rclone lsd remote:

#列出 Box 中的所有文件
rclone ls remote:

#将本地目录复制到名为 backup 的 Box 目录
rclone copy /home/source remote:backup

#路径可以根据需要深度,例如 remote:directory/subdirectory

配置 crontab 定时任务

  • 运行 crontab -e ,编辑一条新的定时任务。每 15 天自动备份上传到云存储。
0 3 1,15 * * /bin/bash /root/backup/backup_linode_mysql.sh