xiaohack's Blog - 墨天轮
type: channel
link: https://blog.xiaohack.org/tag/df188d30-44f623/
items: 技术分享 | MySQL 8.0逻辑备份MySQL Shell全备脚本
items: 技术分享 | MySQL8.0物理备份Xtrabackup全备脚本

技术分享 | MySQL 8.0逻辑备份MySQL Shell全备脚本
type: item
date: 2026-02-03T11:35:31+08:00
description: 本文为墨天轮数据库管理服务团队第162期技术分享，内容原创，作者为技术顾问闫建，如需转载请联系小墨（VX：modb666）并注明来源。如需查看更多文章可关注【墨天轮】公众号。脚本功能此脚本是专门用于MySQL8.0逻辑备份的 MySQL Shell备份脚本，它包含了备份数据库实例的所有对象，是整个实例级别的备份，也是当下取代传统mysqldump工具的最优替代方案。脚本内容该脚本名称为mysqlshell\_full\_backup.sh#!/bin/bash ######################################## # MySQL Shell 自动备份脚本 (MySQL 8.0+) # 功能: 全量逻辑备份 + 错误处理 + 日志记录 + 自动清理 + 时间统计 # 备份文件名格式: full_mysqlshell_backup_时间 # 使用方式: 直接修改脚本中的变量值，然后执行 ./mysqlshell_full_backup.sh ######################################## ################### 配置参数 ################### # MySQL Shell命令绝对路径（重要：请根据实际安装路径修改） MYSQLSH_CMD="/data/soft/mysqlshell8044/bin/mysqlsh" # 备份保留天数（默认15天） RETAIN_DAYS=${RETAIN_DAYS:-15} # 并行度（默认4线程） PARALLEL=${PARALLEL:-4} # 排除的数据库（逗号分隔，默认空） EXCLUDE_SCHEMAS=${EXCLUDE_SCHEMAS:-""} # 备份存储根目录 BACKUP_ROOT="/data/backup" # 时间戳格式：YYYYMMDD_HHMMSS TIMESTAMP=$(date +%Y%m%d_%H%M%S) # 备份目录名称（按您要求的格式） BACKUP_DIR_NAME="full_mysqlshell_backup_${TIMESTAMP}" BACKUP_DIR="${BACKUP_ROOT}/${BACKUP_DIR_NAME}" # MySQL连接参数（请根据实际情况修改） MYSQL_USER="root" MYSQL_PASSWORD="mysql" MYSQL_HOST="localhost" MYSQL_PORT="3306" # 日志文件路径 LOG_FILE="${BACKUP_ROOT}/backup.log" ############################################ ########## 函数：记录日志 ########## log() { local level="$1" local message="$2" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local log_entry="[${timestamp}] [${level}] ${message}" # 输出到标准输出并写入日志文件 echo "${log_entry}" | tee -a "${LOG_FILE}" } ########## 函数：错误处理并退出 ########## error_exit() { log "ERROR" "$1" end_time=$(date +%s) total_runtime=$((end_time - start_time_global)) log "INFO" "脚本异常退出，总运行时间: $(format_duration $total_runtime)" exit 1 } ########## 函数：计算和格式化运行时间 ########## format_duration() { local seconds=$1 local hours=$((seconds / 3600)) local minutes=$(( (seconds % 3600) / 60 )) local secs=$((seconds % 60)) if [ $hours -gt 0 ]; then echo "${hours}小时${minutes}分${secs}秒" elif [ $minutes -gt 0 ]; then echo "${minutes}分${secs}秒" else echo "${secs}秒" fi } ########## 函数：检查依赖工具 ########## check_dependencies() { # 检查MySQL Shell是否存…

技术分享 | MySQL8.0物理备份Xtrabackup全备脚本
type: item
date: 2026-01-27T12:22:29+08:00
description: 本文为墨天轮数据库管理服务团队第159期技术分享，内容原创，作者为技术顾问闫建，如需转载请联系小墨（VX：modb666）并注明来源。如需查看更多文章可关注【墨天轮】公众号。脚本功能此脚本是专门用于MySQL8.0物理备份的xtrabackup脚本,并且xtrabackup版本为8.0的最新版，它包含了备份数据库（包含全量备份，错误处理，日志记录，自动清理，耗时统计）的完整配置。脚本内容该脚本名称为xtrabackup8.0\_full.sh#!/bin/bash # =============================================== # MySQL XtraBackup 全量备份脚本 (默认未启用压缩) # 功能：全量备份 + 错误处理 + 日志记录 + 自动清理 + 耗时统计 # 版本：1.0 # 日期：2025-11-04 # =============================================== # ------------------------------- # 可配置变量（修改此处适应环境） # ------------------------------- # 基础路径 BACKUP_BASE_DIR="/data/backup" # 备份根目录 LOG_DIR="${BACKUP_BASE_DIR}/logs" # 日志目录 FULL_BACKUP_DIR="${BACKUP_BASE_DIR}/full" # 全量备份目录 # MySQL 连接配置 MYSQL_USER="root" # 备份专用用户（需提前授权） MYSQL_PASSWORD="mysql" # 用户密码 MYSQL_SOCKET="/data/mysql/3306/run/mysql.sock" # MySQL Socket路径 MYSQL_CNF="/etc/my.cnf" # MySQL配置文件路径 # 备份参数 RETENTION_DAYS=7 # 备份保留天数（默认7天） COMPRESS_ENABLED=0 # 是否启用压缩（0-禁用，1-启用，默认禁用） COMPRESS_ALGORITHM="zstd" # 压缩算法（zstd/lz4/quicklz，默认zstd，如果采用zstd压缩方式，在解压的时候建议在OS上检查是否安装 zstd软件，如未安装，请提前安装yum install zstd） COMPRESS_THREADS=4 # 压缩线程数（默认4） PARALLEL=4 # 备份并行线程数（默认4） # XtraBackup路径（若不在PATH中，需指定完整路径，注意：该路径需要提前修改为符合实际环境的绝对路径） XTRABACKUP_PATH="/data/soft/xtrabackup8.0.35-34-glibc2.36/bin/xtrabackup" # ------------------------------- # 函数定义 # ------------------------------- # 日志记录函数 log_message() { local level="$1" local message="$2" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local log_entry="[${timestamp}] [${level}] ${message}" # 输出到标准输出并写入日志文件 echo "${log_entry}" | tee -a "${CURRENT_LOG_FILE}" } # 错误处理函数 error_exit() { log_message "ERROR" "脚本执行失败: $1" exit 1 } # 计算和格式化时间差函数 calculate_duration() { local start_seconds="$1" local end_seconds="$2" local total_seconds=$((end_seconds - start_seconds)) # 转换为天、小时、分钟、秒的易读格式 local days=$((total_seconds / 86400)) local hours=$(( (total_seconds % 86400) / 3600 )) local minutes=$(( (total_seconds % 3600) / 60 )) local seconds=$((total_seconds % 60)) local duration_str="" if [ $days -gt 0 ]; then duration_str="…