#!/bin/bash # 数据库备份脚本 # 备份所有 xdz 相关数据库 # 数据库连接配置 DB_HOST="127.0.0.1" DB_PORT="3306" DB_USER="root" DB_PASSWORD="Xiuxiu@087" # 要备份的数据库列表 DATABASES=("xdz_user" "xdz_business" "xdz_vehicle" "xdz_message") # 创建备份目录 BACKUP_BASE_DIR="$(cd "$(dirname "$0")" && pwd)/backups" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR="${BACKUP_BASE_DIR}/${TIMESTAMP}" mkdir -p "${BACKUP_DIR}" echo "==========================================" echo "开始数据库全量备份" echo "==========================================" echo "备份时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "备份目录: ${BACKUP_DIR}" echo "" # 备份每个数据库 for DB_NAME in "${DATABASES[@]}"; do echo "正在备份数据库: ${DB_NAME}..." BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.sql" # 使用 mysqldump 备份数据库 mysqldump -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" \ --single-transaction \ --routines \ --triggers \ --events \ --default-character-set=utf8mb4 \ "${DB_NAME}" > "${BACKUP_FILE}" 2>&1 if [ $? -eq 0 ]; then FILE_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1) echo "✓ 备份成功: ${DB_NAME} (${FILE_SIZE})" else echo "✗ 备份失败: ${DB_NAME}" echo "错误信息已保存到备份文件" fi echo "" done # 生成备份说明文件 cat > "${BACKUP_DIR}/备份说明.txt" << EOF 数据库备份说明 ================ 备份时间: $(date '+%Y-%m-%d %H:%M:%S') 备份目录: backups/${TIMESTAMP} 备份的数据库: EOF for DB_NAME in "${DATABASES[@]}"; do BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.sql" if [ -f "${BACKUP_FILE}" ]; then FILE_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1) echo "1. ${DB_NAME} (${FILE_SIZE})" >> "${BACKUP_DIR}/备份说明.txt" fi done cat >> "${BACKUP_DIR}/备份说明.txt" << EOF 备份说明: - 包含所有表(包括日志表的结构和数据) - 使用 --single-transaction 保证数据一致性 - 包含存储过程和函数(--routines) - 包含触发器(--triggers) - 包含事件(--events) 备份参数: - --single-transaction: 保证数据一致性 - --routines: 包含存储过程和函数 - --triggers: 包含触发器 - --events: 包含事件 恢复方法: mysql -h${DB_HOST} -u${DB_USER} -p'密码' 数据库名 < 备份文件.sql 例如: mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_user < xdz_user.sql mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_business < xdz_business.sql mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_vehicle < xdz_vehicle.sql mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_message < xdz_message.sql 注意: 所有表都已备份,包括日志表的结构和数据,确保恢复后应用程序能正常运行。 EOF echo "==========================================" echo "备份完成!" echo "备份目录: ${BACKUP_DIR}" echo "=========================================="