Linux服务器中Mysql定时备份(清理)数据库
1、查看 crond 服务是否运行
systemctl status crond
如果没有运行,则需要启动并且设置成开机自启
systemctl start crond
systemctl enable crond
2、编写Mysql备份脚本
创建脚本文件db_backup.sh
> 我的脚本执行的内容是备份数据库为压缩文件的同时,删除大于7天的数据库文件。
#!/bin/bash# ========= 配置项 =========
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="数据库账号"
DB_PASS="数据库密码"
DB_NAME="数据库名称"# ========= 路径 =========
BACKUP_DIR="/opt/backups/mysql"
LOG_FILE="/opt/backups/backup.log"# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"# 当前时间
NOW=$(date +"%F_%H:%M:%S")# 备份文件名
BACKUP_FILE="${DB_NAME}_${NOW}.sql"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILE}"# ========= 执行备份 =========
echo "[${NOW}] 开始备份数据库: ${DB_NAME}" >> "$LOG_FILE"mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" --databases "$DB_NAME" > "$BACKUP_PATH"# ========= 执行压缩 =========
if [ $? -eq 0 ]; then# 压缩文件gzip "$BACKUP_PATH"echo "[${NOW}] 备份成功: ${BACKUP_FILE}.gz" >> "$LOG_FILE"
elseecho "[${NOW}] 备份失败 for ${DB_NAME}" >> "$LOG_FILE"exit 1
fi# ========= 删除7天前的旧备份 =========
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \;
echo "[${NOW}] 已经自动清除大于7天的备份文件" >> "$LOG_FILE"
3、编辑定时任务
使用
crontab -e
打开当前用户的任务配置
crontab -e
我的业务是每天晚上的11点执行该Mysql备份脚本
0 23 * * * /opt/scripts/db_backup.sh
tips:如果想马上看到效果可以立刻执行或者设置成每一分钟执行一次
#立刻执行,在当前文件夹下
./db_backup.sh
#每一分钟执行一次的crond表达式 * * * *
* * * * * /opt/scripts/db_backup.sh
效果:
4、查看定时任务列表
crontab -l
效果:
5、查看日志确认定时任务是否执行
cat /var/log/cron
6、效果
数据库备份压缩文件:
数据库备份日志: