1.创建mysql备份命令

/usr/local/bin/mysqlbackup.sh

1.定时任务生成mysql备份文件(备份waline数据库和umami数据库)
2.复制mysql备份文件到天翼云盘,删除原备份文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
# 设置变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名字
BACKUP_DIR="/var/mysql/data/backup" # 临时保存备份文件的本地路径
CLOUD_BACKUP_DIR="/mnt/cloud/backup/mysql" # 云存储中的目标备份目录
DATE=$(date +"%Y%m%d_%H%M%S") # 获取当前日期时间作为备份文件名的一部分
MYSQL_ROOT_PASSWORD="密码" # 尝试从环境变量获取MySQL root用户的密码,否则使用默认值
# 创建本地备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 检查目录是否创建成功
if [ ! -d "$BACKUP_DIR" ]; then
echo "Error: Could not create or access backup directory: $BACKUP_DIR"
exit 1
fi
# 确保云存储中的目标目录存在
rclone mkdir "$CLOUD_BACKUP_DIR"
# 创建备份文件,使用环境变量传递密码
docker exec -i $MYSQL_CONTAINER_NAME sh -c 'exec mysqldump --databases waline umami -uroot -p"$MYSQL_ROOT_PASSWORD"' > "$BACKUP_DIR/mysql_backup_$DATE.sql"
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "Backup succeeded. Starting to copy to cloud..."
# 使用 rclone 将备份文件复制到云存储
rclone copy "$BACKUP_DIR/mysql_backup_$DATE.sql" "$CLOUD_BACKUP_DIR/"
# 检查 rclone 是否成功执行
if [ $? -eq 0 ]; then
echo "Copy to cloud succeeded. Deleting local backup file..."
rm "$BACKUP_DIR/mysql_backup_$DATE.sql"
echo "Local backup file deleted."
else
echo "Failed to copy to cloud. Local backup file kept for safety."
fi
else
echo "Backup failed."
fi
echo "Backup process finished at $(date)"

2.编辑 root 用户的 crontab 文件

使用 crontab -e 命令编辑 root 用户的 crontab 文件:

1
sudo crontab -e

3.添加定时任务

添加一行来定义备份任务的时间间隔。例如,每周日凌晨 1 点:

1
0 1 * * 0 /usr/local/bin/mysqlbackup.sh >> /var/log/mysqlbackup.log 2>&1

4.手动执行一遍

1
/usr/local/bin/mysqlbackup.sh

5. 查看执行日志(定时任务的)

1
tail -2000f /var/log/mysqlbackup.log

6.效果图

image.png