mysql 自动备份脚本


#!/bin/bash
#
# mysqldump -uroot -ppass test > /code/mysql_backup/test_$(date +%Y%m%d_%H%M%S).sql
# ===================== 配置项(根据你的环境修改) =====================
# MySQL 连接信息
MYSQL_USER="root" # MySQL 用户名
MYSQL_PASSWORD="root" # MySQL 密码(若为空,删除 -p 后面的内容)
DATABASE_NAME="test" # 要备份的数据库名(多个库用空格分隔,或写 --all-databases 备份所有)
MYSQL_HOST="127.0.0.1" # MySQL 主机
MYSQL_PORT="3306" # MySQL 端口

# 备份存储路径(确保目录存在,否则手动创建:mkdir -p /data/mysql_backup)
BACKUP_DIR="/code/admin/mysql_backup"

# 保留备份的天数(超过则自动删除,避免磁盘占满,0 表示不删除)
KEEP_DAYS=7

# ===================== 备份逻辑 =====================
# 获取 ISO 格式的年月(YYYY-MM),比如 2025-12
ISO_MONTH=$(date +%Y-%m)

# 生成备份文件名:数据库名_ISO年月_时间戳.sql.gz(压缩节省空间)
# BACKUP_FILENAME="${DATABASE_NAME}_${ISO_MONTH}_$(date +%Y-%m-%d_%H%M%S).sql.gz"
BACKUP_FILENAME="${DATABASE_NAME}-$(date +%Y-%m%d_%H%M%S).sql.gz"

BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILENAME}"

# 日志文件路径
LOG_FILE="${BACKUP_DIR}/mysql_backup.log"

# 记录备份开始日志
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始备份数据库 ${DATABASE_NAME}..." >> ${LOG_FILE}

# 执行 mysqldump 并压缩(推荐压缩,大幅减小文件体积)
mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${DATABASE_NAME} | gzip > ${BACKUP_PATH}

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份成功!文件路径:${BACKUP_PATH}" >> ${LOG_FILE}

# 清理旧备份(可选)
if [ ${KEEP_DAYS} -gt 0 ]; then
find ${BACKUP_DIR} -name "${DATABASE_NAME}_*.sql.gz" -mtime +${KEEP_DAYS} -delete
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 已删除 ${KEEP_DAYS} 天前的旧备份" >> ${LOG_FILE}
fi
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份失败!" >> ${LOG_FILE}
exit 1
fi

exit 0