Files
ccdi/export_database.sh
wkc 46dd386919 refactor: 将数据库配置内置到脚本中,简化使用流程
改进内容:
1. export_database.sh
   - 将数据库配置直接内置在脚本顶部
   - 移除外部配置文件依赖
   - 配置项: DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_NAME

2. import_database.sh
   - 将三个环境的配置内置在脚本顶部
   - 配置项: DEV_DB_*, TEST_DB_*, PROD_DB_*
   - 无需额外配置文件

3. 更新操作指南
   - 反映配置内置的变化
   - 更新配置步骤说明
   - 更新文件结构说明

优点:
- 使用更简单,无需创建配置文件
- 配置集中在一处,易于管理
- 减少文件依赖

使用方法:
1. 编辑 export_database.sh 顶部配置数据库信息
2. 编辑 import_database.sh 顶部配置目标环境数据库信息
3. ./export_database.sh  # 导出数据库
4. ./import_database.sh <dev|test|prod>  # 导入到目标环境
2026-02-28 15:25:42 +08:00

270 lines
7.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# CCDI 数据库导出脚本
# 功能:从开发环境导出数据库到 backup 文件夹
set -e # 遇到错误立即退出
# =====================================================
# 数据库配置(请根据实际情况修改)
# =====================================================
# 源数据库配置(开发环境)
DB_HOST="116.62.17.81"
DB_PORT="3306"
DB_USER="root"
DB_PASS="Kfcx@1234"
DB_NAME="ccdi"
# 导出文件配置
BACKUP_DIR="doc/database/backup"
STRUCTURE_FILE="ccdi_structure.sql"
DATA_FILE="ccdi_data.sql"
# mysqldump 参数配置
CHARACTER_SET="utf8mb4"
MAX_ALLOWED_PACKET="512M"
# =====================================================
# 脚本逻辑(无需修改)
# =====================================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 检查 mysqldump 命令
check_mysqldump() {
if ! command -v mysqldump &> /dev/null; then
log_error "mysqldump 命令未找到"
log_info "请安装 MySQL 客户端工具"
exit 1
fi
log_info "mysqldump 命令检查通过"
}
# 创建备份目录
create_backup_dir() {
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
log_info "创建备份目录: $BACKUP_DIR"
fi
}
# 导出表结构
export_structure() {
log_info "开始导出表结构..."
local output_file="${BACKUP_DIR}/${STRUCTURE_FILE}"
# 创建临时文件
local temp_file=$(mktemp)
# 导出表结构到临时文件
mysqldump -h "$DB_HOST" \
-P "$DB_PORT" \
-u "$DB_USER" \
-p"$DB_PASS" \
--no-data \
--skip-triggers \
--skip-add-drop-table \
--default-character-set=$CHARACTER_SET \
--single-transaction \
--max_allowed_packet=$MAX_ALLOWED_PACKET \
"$DB_NAME" > "$temp_file" 2>/dev/null
if [ $? -eq 0 ]; then
# 添加字符集声明到文件头部
{
echo "-- CCDI 数据库表结构"
echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
echo "-- 字符集: ${CHARACTER_SET}"
echo ""
echo "SET NAMES utf8mb4;"
echo "SET CHARACTER SET utf8mb4;"
echo "SET GLOBAL character_set_client=utf8mb4;"
echo "SET GLOBAL character_set_connection=utf8mb4;"
echo "SET GLOBAL character_set_results=utf8mb4;"
echo ""
cat "$temp_file"
} > "$output_file"
rm -f "$temp_file"
log_info "表结构导出成功: $output_file"
log_info "文件大小: $(du -h "$output_file" | cut -f1)"
else
rm -f "$temp_file"
log_error "表结构导出失败"
exit 1
fi
}
# 导出数据
export_data() {
log_info "开始导出数据..."
local output_file="${BACKUP_DIR}/${DATA_FILE}"
# 创建临时文件
local temp_file=$(mktemp)
# 导出数据到临时文件
mysqldump -h "$DB_HOST" \
-P "$DB_PORT" \
-u "$DB_USER" \
-p"$DB_PASS" \
--no-create-info \
--skip-triggers \
--default-character-set=$CHARACTER_SET \
--single-transaction \
--complete-insert \
--extended-insert \
--max_allowed_packet=$MAX_ALLOWED_PACKET \
"$DB_NAME" > "$temp_file" 2>/dev/null
if [ $? -eq 0 ]; then
# 添加字符集声明到文件头部
{
echo "-- CCDI 数据库数据"
echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
echo "-- 字符集: ${CHARACTER_SET}"
echo ""
echo "SET NAMES utf8mb4;"
echo "SET CHARACTER SET utf8mb4;"
echo "SET GLOBAL character_set_client=utf8mb4;"
echo "SET GLOBAL character_set_connection=utf8mb4;"
echo "SET GLOBAL character_set_results=utf8mb4;"
echo "SET FOREIGN_KEY_CHECKS=0;"
echo ""
cat "$temp_file"
echo ""
echo "SET FOREIGN_KEY_CHECKS=1;"
} > "$output_file"
rm -f "$temp_file"
log_info "数据导出成功: $output_file"
log_info "文件大小: $(du -h "$output_file" | cut -f1)"
else
rm -f "$temp_file"
log_error "数据导出失败"
exit 1
fi
}
# 验证导出文件
verify_export() {
log_info "验证导出文件..."
local structure_file="${BACKUP_DIR}/${STRUCTURE_FILE}"
local data_file="${BACKUP_DIR}/${DATA_FILE}"
# 检查文件是否存在
if [ ! -f "$structure_file" ]; then
log_error "表结构文件不存在: $structure_file"
exit 1
fi
if [ ! -f "$data_file" ]; then
log_error "数据文件不存在: $data_file"
exit 1
fi
# 检查字符集声明
if ! grep -q "SET NAMES utf8mb4" "$structure_file"; then
log_error "表结构文件缺少字符集声明"
exit 1
fi
if ! grep -q "SET NAMES utf8mb4" "$data_file"; then
log_error "数据文件缺少字符集声明"
exit 1
fi
log_info "导出文件验证通过"
log_info "表结构文件: $structure_file ($(du -h "$structure_file" | cut -f1))"
log_info "数据文件: $data_file ($(du -h "$data_file" | cut -f1))"
}
# 导出数据库
export_database() {
log_info "========== 开始导出数据库 =========="
check_mysqldump
create_backup_dir
export_structure
export_data
verify_export
log_info "========== 数据库导出完成 =========="
log_info "使用 ./import_database.sh <env> 导入到目标环境"
}
# 使用帮助
show_usage() {
echo "用法: $0 [command]"
echo ""
echo "命令:"
echo " export 导出数据库(默认命令)"
echo " help 显示帮助信息"
echo ""
echo "说明:"
echo " 此脚本从开发环境导出数据库到 doc/database/backup/ 文件夹"
echo " 生成文件:"
echo " - ccdi_structure.sql (表结构)"
echo " - ccdi_data.sql (数据)"
echo ""
echo "配置:"
echo " 数据库配置已内置在脚本顶部,请根据实际情况修改"
echo " 配置项: DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_NAME"
echo ""
echo "前置条件:"
echo " 已安装 MySQL 客户端工具mysqldump"
echo ""
echo "示例:"
echo " $0 # 导出数据库(默认)"
echo " $0 export # 导出数据库"
echo ""
echo "后续操作:"
echo " 使用 ./import_database.sh <env> 导入到目标环境"
}
# 主函数
main() {
case "$1" in
export|"")
export_database
;;
help|--help|-h)
show_usage
;;
*)
log_error "未知命令: $1"
show_usage
exit 1
;;
esac
}
# 执行主函数
main "$@"