Debian|Ubuntu系统自动备份Mysql下的单个数据库|并附带定期清楚功能
在线上运行的服务一致用的是mysql之流,每次换服务器都得手动装mysqldump搓代码再贴进去,实属麻烦。
所以用mysqldump和crontab能够做到定时备份和定时清理配置文件就够了。
生成mysql_backup.sh
#!/bin/bash
# ===== 基本配置 =====
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_NAME="your_database"
DB_USER="backup_user"
DB_PASS="your_password"
# 备份目录
BACKUP_DIR="/opt/mysql_backup"
# 保留天数
KEEP_DAYS=7
# 时间格式
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# 文件名
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"
# ===== 创建目录 =====
mkdir -p "${BACKUP_DIR}"
# ===== 开始备份 =====
/usr/bin/mysqldump \
-h${DB_HOST} \
-P${DB_PORT} \
-u${DB_USER} \
-p${DB_PASS} \
--single-transaction \
--routines \
--events \
--triggers \
${DB_NAME} | gzip > "${BACKUP_FILE}"
# ===== 判断是否成功 =====
if [ $? -eq 0 ]; then
echo "$(date) MySQL backup success: ${BACKUP_FILE}"
else
echo "$(date) MySQL backup FAILED" >&2
exit 1
fi
# ===== 清理旧备份 =====
find "${BACKUP_DIR}" -type f -name "${DB_NAME}_*.sql.gz" -mtime +${KEEP_DAYS} -delete
将脚本添加执行权限
chmod +x /opt/scripts/mysql_backup.sh
将脚本添加到定时任务
每天凌晨两点备份
0 2 * * * /opt/scripts/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
每六个小时备份
0 */6 * * * /opt/scripts/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1