暂无图片
暂无图片
10
暂无图片
暂无图片
暂无图片

MySQL8.0逻辑备份mysqldump全备脚本

image.png

脚本功能

  此脚本是专门用于MySQL8.0全实例备份的mysqldump脚本,它包含了备份数据库实例的所有对象(数据、结构、存储过程、函数、事件、触发器)的完整配置。

脚本内容

  脚本名称命名为 mysql_full_backup.sh

### mysql_full_backup.sh脚本内容如下:

#!/bin/bash

# MySQL 8.0 全实例自动备份脚本
# 功能:备份所有数据库(包含存储过程、函数、事件、触发器)

# ====== 配置区 ======
# MySQL 连接配置
MYSQL_USER="root"                    # MySQL 用户名
MYSQL_PASS="your_password"           # MySQL 密码(建议使用配置文件免密)
MYSQL_HOST="localhost"               # MySQL 主机
MYSQL_PORT="3306"                    # MySQL 端口

# 备份路径配置
BACKUP_BASE_DIR="/data/mysql_backup"            # 备份根目录
DATE_STAMP=$(date +"%Y%m%d_%H%M%S")            # 时间戳格式
BACKUP_DIR="${BACKUP_BASE_DIR}/full_${DATE_STAMP}"  # 本次备份目录

# 备份保留天数(自动清理旧备份)
RETENTION_DAYS=7

# 日志文件
LOG_FILE="${BACKUP_BASE_DIR}/backup.log"

# ====== 函数定义 ======
# 记录日志函数
log_message() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> ${LOG_FILE}
}

# 检查错误函数
check_error() {
    if [ $? -ne 0 ]; then
        log_message "错误: $1"
        exit 1
    fi
}

# ====== 主程序开始 ======
log_message "=== MySQL全量备份开始 ==="

# 1. 创建备份目录
mkdir -p ${BACKUP_DIR}
check_error "创建备份目录失败"

# 2. 设置权限(保护备份文件)
chmod 750 ${BACKUP_DIR}
log_message "备份目录创建成功: ${BACKUP_DIR}"

# 3. 执行全实例备份(关键参数说明)
log_message "开始执行mysqldump全实例备份..."

mysqldump --user=${MYSQL_USER} \
          --password=${MYSQL_PASS} \
          --host=${MYSQL_HOST} \
          --port=${MYSQL_PORT} \
          --all-databases \
          --single-transaction \
          --routines \
          --events \
          --triggers \
          --flush-logs \
          --source-data=2 \
          --set-gtid-purged=OFF \
          --default-character-set=utf8mb4 \
          --max-allowed-packet=1G \
          --hex-blob \
          --result-file=${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql

check_error "mysqldump备份执行失败"

log_message "MySQL全实例备份完成: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql"

# 4. 备份MySQL配置文件(重要!)
cp /etc/my.cnf ${BACKUP_DIR}/my.cnf_backup_${DATE_STAMP} 2>/dev/null || log_message "警告: 未找到/etc/my.cnf,跳过配置文件备份"

# 5. 压缩备份文件(节省空间)
log_message "开始压缩备份文件..."
gzip ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql
check_error "备份文件压缩失败"
log_message "备份文件压缩完成: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz"

# 6. 生成MD5校验文件(验证备份完整性)
md5sum ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz > ${BACKUP_DIR}/backup.md5
log_message "生成MD5校验文件"

# 7. 清理旧备份(按保留天数设置)
log_message "清理${RETENTION_DAYS}天前的旧备份..."
find ${BACKUP_BASE_DIR} -name "full_*" -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} \; 2>/dev/null

# 8. 输出备份信息
BACKUP_SIZE=$(du -sh ${BACKUP_DIR} | cut -f1)
log_message "备份完成! 备份大小: ${BACKUP_SIZE}, 备份位置: ${BACKUP_DIR}"

# 9. 验证备份文件完整性
log_message "验证备份文件完整性..."
md5sum -c ${BACKUP_DIR}/backup.md5 >> ${LOG_FILE} 2>&1
if [ $? -eq 0 ]; then
    log_message "备份文件完整性验证通过"
else
    log_message "警告: 备份文件完整性验证失败"
fi

log_message "=== MySQL全量备份结束 ==="
echo "备份已完成! 文件位置: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz"

 

🔧关键参数说明

核心备份选项:​​
1.  --all-databases:备份所有数据库(含系统库)
2.  --single-transaction:通过事务确保InnoDB表备份一致性(避免锁表)
3.  --routines:备份存储过程和函数
4.  --events:备份事件调度器
5.  --triggers:备份触发器

高级配置

--source-data=2:在备份中记录二进制日志位置(用于主从复制)
--set-gtid-purged=OFF:避免GTID相关冲突
--hex-blob:安全处理BLOB数据类型

 

使用方法

1. 保存脚本并赋予执行权限

chmod +x mysql_full_backup.sh

2. 配置MySQL免密认证​​(可选推荐,避免密码明文)

 在/root/.my.cnf中添加:

[client]
user=root
password=your_password
host=localhost
port=3306

 然后设置权限:chmod 600 /root/.my.cnf

3. 手动执行备份

./mysql_full_backup.sh

4. 配置定时任务(每日凌晨2点执行)

# 编辑crontab:crontab -e 添加如下内容并保存
0 2 * * * /path/to/mysql_full_backup.sh

备份验证与恢复

验证备份完整性​​:
# 检查备份文件
gunzip -c mysql_full_backup_20251020_143000.sql.gz | head -100

# 验证MD5校验和
md5sum -c backup.md5

恢复备份​​:
# 解压备份文件
gunzip mysql_full_backup_20251020_143000.sql.gz

# 恢复到MySQL
mysql -u root -p < mysql_full_backup_20251020_143000.sql

总结

  该脚本提供了一个生产环境所需的完整功能,包括错误处理、日志记录、自动清理和完整性验证。数据库运维人员可以根据实际环境调整配置参数,特别是备份路径和保留天数设置。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论