#!/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 "=========================================="














































