mysqldump备份脚本
(建议备份数据量不大于100G)
创建备份路径:
[root@localhost ~]# mkdir -p /backup/{fullbak,scripts}
[root@localhost ~]# cat >/backup/scripts/mysql_full_backup_keep_last_two.sh<<'EOF'
#!/bin/bash
# ===========================
# MySQL Backup Script
# ===========================
# 设置MySQL配置文件路径
DB_CONF="/backup/scripts/my.cnf"# 全量备份目录
FULL_DIR="/backup/fullbak"
# 日志文件
LOG_FILE="/backup/scripts/back.log"# ====== Functions ======
# 输出日志
log_message() {local message="$1"echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $message" | tee -a "${LOG_FILE}" 2>&1
}# 创建目录
create_directory() {local dir="$1"if [ ! -d "$dir" ]; thenmkdir -p "$dir"fi
}# 删除过期备份,但保留最近2份备份
clear_old_backups() {local backup_filesbackup_files=$(ls -1t ${FULL_DIR}/full_backup_*.sql)backup_count=$(echo "$backup_files" | wc -l)if [ "$backup_count" -gt 2 ]; thenfiles_to_delete=$(echo "$backup_files" | tail -n +3)echo "$files_to_delete" | xargs rm -flog_message "删除旧备份文件: $(echo "$files_to_delete" | tr '\n' ' ')"fi
}# 获取备份目录大小
get_dir_size() {local dir="$1"du -sh "$dir" | awk '{print $1}'
}# 全量备份
perform_full_backup() {create_directory "$FULL_DIR"local backup_timebackup_time=$(date '+%Y%m%d-%H%M%S')local backup_file="${FULL_DIR}/full_backup_${backup_time}.sql"log_message "日期: ${backup_time}"log_message "星期: $(date +%w)"log_message "本次全量备份文件为 ${backup_file}"mysqldump \--defaults-extra-file="$DB_CONF" \--all-databases \--single-transaction \--triggers \--routines \--events \--force \> "${backup_file}"# 检查备份文件最后一行是否包含 "Dump completed on"if tail -n 1 "${backup_file}" | grep -q "Dump completed on"; thenlocal backup_sizebackup_size=$(get_dir_size "${FULL_DIR}")log_message "本次备份数据 ${backup_size}"log_message "备份完成...\n\n\n"elselog_message "备份失败,请检查日志!备份文件未包含关键字 'Dump completed on'\n\n\n"exit 1fi# 清理多余的备份文件,保留最近2份clear_old_backups
}# ====== Main Logic ======
log_message "备份开始..."
log_message "备份方式: 逻辑备份"
# 获取当前星期几
current_weekday=$(date +%w)
perform_full_backup
EOF
准备配置文件:
[root@localhost ~]# cat >/backup/scripts/my.cnf<<'EOF'
[client]
user=root
password=123456
host=127.0.0.1
port=3306
EOF
修改配置文件权限:
[root@localhost ~]# chmod 600 /backup/scripts/my.cnf
执行测试:
[root@localhost ~]# sh /backup/scripts/mysql_full_backup_keep_last_two.sh
2025-02-26 10:51:44 - 备份开始...
2025-02-26 10:51:44 - 备份方式: 逻辑备份
2025-02-26 10:51:44 - 日期: 20250226-105144
2025-02-26 10:51:44 - 星期: 3
2025-02-26 10:51:44 - 本次全量备份文件为 /backup/fullbak/full_backup_20250226-105144.sql
2025-02-26 10:51:44 - 本次备份数据 3.0M
2025-02-26 10:51:44 - 备份完成...2025-02-26 10:51:44 - 删除旧备份文件: /backup/fullbak/full_backup_20250226-105129.sql
写成定时任务(每周周六晚上0点执行):
[root@localhost ~]# crontab -e
0 0 * * 6 /bin/bash /backup/scripts/mysql_full_backup_keep_last_two.sh