使用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"

#定义备份的目录和创建此目录。用-p参数避免已存在同名文件夹
BACKUP_DIR="/tmp/backup"
REMOTE_NAME="remote"
mkdir -p $BACKUP_DIR


# 定义备份文件的文件名
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
# Linux 和 MacOS 用户可以在本地电脑上使用 SSH 隧道将无头盒端口 53682 重定向到本地计算机,方法是使用以下命令:
# 命令中的username@remote_server 根据实际情况修改
ssh -L localhost:53682:localhost:53682 username@remote_server
#开启交互式配置流程。可以全部都选 default
rclone config
  • 然后在最后一步出现 Use auto config? 回答 Y 问题。
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?state=xxxxxxxxxxxx 到本地计算机上的浏览器,完成身份验证即可完成。
  • 配置完成。你就可以像这样使用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