linux服务器里,通过docker运行的mysql与redis,实现每天自动对数据进行备份。
1、编写sh脚本文件
#!/bin/bash
# 设置备份目录和文件名
BACKUP_DIR=/home/evenwu2024/mysql_backup
DATE=$(date +\%F)
MYSQL_BACKUP_FILE="$BACKUP_DIR/mysql_backup_$DATE.sql"
REDIS_BACKUP_FILE="$BACKUP_DIR/redis_backup_$DATE.rdb"
# 备份 MySQL
echo "开始备份 MySQL..."
docker exec mysql_container mysqldump -u root -pwhsy2022 predx_test > $MYSQL_BACKUP_FILE
echo "MySQL 备份完成:$MYSQL_BACKUP_FILE"
# 备份 Redis
echo "开始备份 Redis..."
docker exec redis_container redis-cli save
docker cp redis_container:/data/dump.rdb $REDIS_BACKUP_FILE
echo "Redis 备份完成:$REDIS_BACKUP_FILE"
# 删除超过7天的旧备份
echo "删除超过7天的旧备份..."
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \;
find $BACKUP_DIR -type f -name "*.rdb" -mtime +7 -exec rm {} \;
echo "旧备份删除完成"
echo "所有备份完成"
注意,backup_dir目录的替换,container_name的替换。
2、尝试执行脚本
其实本质就是,通过docker进入容器的内部,mysql使用的是mysqldump命令进行备份sql文件,默认是表结构和数据一起备份,redis就是进入内部后执行save命令,将dump.rdb文件保存起来。
运行脚本:
执行授权命令:chmod +x /home/evenwu2024/backup_mysql.sh
可以看到运行后 已经在指定的目录下进行了备份
3、创建定时执行功能
--使用命令:crontab -e
--添加以下cron表达式:0 2 * * * /home/evenwu2024/backup_mysql.sh
--前面部分是cron表达式内容,可以根据需要进行调整,我这里是每天的凌晨两点进行执行,后面部分就是脚本文件的路径
--添加后保存crontab。使用crontab -l可验证修改成功
然后每天的凌晨两点,就会自动备份mysql和redis的数据了