From 46dd386919717286d73d5915512ca8ea2d67e342 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Sat, 28 Feb 2026 15:25:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E5=86=85=E7=BD=AE=E5=88=B0=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=EF=BC=8C=E7=AE=80=E5=8C=96=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 改进内容: 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 # 导入到目标环境 --- doc/database/backup/ccdi_data.sql | 4 +- doc/database/backup/ccdi_structure.sql | 4 +- doc/database/数据库迁移操作指南.md | 141 ++++++++-------- export_database.sh | 79 +++++---- import_database.sh | 225 +++++++++++-------------- 5 files changed, 222 insertions(+), 231 deletions(-) diff --git a/doc/database/backup/ccdi_data.sql b/doc/database/backup/ccdi_data.sql index 1d0a9ae..3367488 100644 --- a/doc/database/backup/ccdi_data.sql +++ b/doc/database/backup/ccdi_data.sql @@ -1,5 +1,5 @@ -- CCDI 数据库数据 --- 导出时间: 2026-02-28 14:39:40 +-- 导出时间: 2026-02-28 15:23:04 -- 源数据库: 116.62.17.81:3306/ccdi -- 字符集: utf8mb4 @@ -445,6 +445,6 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2026-02-28 14:39:40 +-- Dump completed on 2026-02-28 15:23:04 SET FOREIGN_KEY_CHECKS=1; diff --git a/doc/database/backup/ccdi_structure.sql b/doc/database/backup/ccdi_structure.sql index a59d878..9427914 100644 --- a/doc/database/backup/ccdi_structure.sql +++ b/doc/database/backup/ccdi_structure.sql @@ -1,5 +1,5 @@ -- CCDI 数据库表结构 --- 导出时间: 2026-02-28 14:39:30 +-- 导出时间: 2026-02-28 15:22:54 -- 源数据库: 116.62.17.81:3306/ccdi -- 字符集: utf8mb4 @@ -1092,4 +1092,4 @@ CREATE TABLE `sys_user_role` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2026-02-28 14:39:30 +-- Dump completed on 2026-02-28 15:22:54 diff --git a/doc/database/数据库迁移操作指南.md b/doc/database/数据库迁移操作指南.md index 9824475..50a222a 100644 --- a/doc/database/数据库迁移操作指南.md +++ b/doc/database/数据库迁移操作指南.md @@ -11,28 +11,31 @@ 1. **export_database.sh** - 数据库导出脚本 - 从开发环境导出数据库 - 生成表结构和数据文件到 `doc/database/backup/` 文件夹 + - 配置已内置在脚本顶部 2. **import_database.sh** - 数据库导入脚本 - 从 `doc/database/backup/` 文件夹读取备份文件 - 导入到指定的目标环境(dev/test/prod) + - 配置已内置在脚本顶部 ## 文件结构 ``` 项目根目录/ -├── export_database.sh # 导出脚本 -├── import_database.sh # 导入脚本 -├── db_config.conf.template # 配置模板 -├── db_config.conf # 实际配置(不提交到 Git) +├── export_database.sh # 导出脚本(配置已内置) +├── import_database.sh # 导入脚本(配置已内置) └── doc/ └── database/ - ├── backup/ # 备份文件夹 - │ ├── .gitkeep - │ ├── ccdi_structure.sql # 表结构(~60KB) - │ └── ccdi_data.sql # 数据文件(~5.7MB) - └── alter_collation_to_general_ci.sql # 排序规则修改脚本 + ├── 数据库迁移操作指南.md # 本文档 + ├── alter_collation_to_general_ci.sql # 排序规则修改脚本 + └── backup/ # 备份文件夹 + ├── .gitkeep + ├── ccdi_structure.sql # 表结构(~60KB) + └── ccdi_data.sql # 数据文件(~5.7MB) ``` +**注意:** 数据库配置已直接内置在脚本中,无需额外的配置文件。 + ## 前置条件 ### 必需工具 @@ -54,49 +57,60 @@ mysql --version ## 配置步骤 -### 1. 创建配置文件 +### 1. 修改导出脚本配置 + +编辑 `export_database.sh` 脚本顶部配置: ```bash -# 复制配置模板 -cp db_config.conf.template db_config.conf - -# 编辑配置文件 -nano db_config.conf # 或使用其他编辑器 +# 源数据库配置(开发环境) +DB_HOST="116.62.17.81" # 数据库地址 +DB_PORT="3306" # 数据库端口 +DB_USER="root" # 数据库用户名 +DB_PASS="Kfcx@1234" # 数据库密码 +DB_NAME="ccdi" # 数据库名称 ``` -### 2. 填写配置信息 +### 2. 修改导入脚本配置 -编辑 `db_config.conf` 文件,填写以下信息: +编辑 `import_database.sh` 脚本顶部配置: -**源数据库(开发环境):** -- `SOURCE_DB_HOST`: 开发环境数据库地址 -- `SOURCE_DB_PORT`: 数据库端口(默认 3306) -- `SOURCE_DB_USER`: 数据库用户名 -- `SOURCE_DB_PASS`: 数据库密码 -- `SOURCE_DB_NAME`: 数据库名称(ccdi) +**开发环境:** +```bash +DEV_DB_HOST="116.62.17.81" # 开发环境数据库地址 +DEV_DB_PORT="3306" # 数据库端口 +DEV_DB_USER="root" # 数据库用户名 +DEV_DB_PASS="Kfcx@1234" # 数据库密码 +DEV_DB_NAME="ccdi" # 数据库名称 +``` -**生产环境数据库:** -- `PROD_DB_HOST`: 生产环境数据库地址 -- `PROD_DB_PORT`: 数据库端口 -- `PROD_DB_USER`: 生产环境数据库用户名 -- `PROD_DB_PASS`: 生产环境数据库密码 -- `PROD_DB_NAME`: 数据库名称(ccdi) +**测试环境:** +```bash +TEST_DB_HOST="your_test_host" # 测试环境数据库地址 +TEST_DB_PORT="3306" # 数据库端口 +TEST_DB_USER="your_test_user" # 数据库用户名 +TEST_DB_PASS="your_test_password" # 数据库密码 +TEST_DB_NAME="ccdi" # 数据库名称 +``` -**测试环境数据库(可选):** -- `TEST_DB_HOST`: 测试环境数据库地址 -- `TEST_DB_PORT`: 数据库端口 -- `TEST_DB_USER`: 测试环境数据库用户名 -- `TEST_DB_PASS`: 测试环境数据库密码 -- `TEST_DB_NAME`: 数据库名称(ccdi) +**生产环境:** +```bash +PROD_DB_HOST="your_prod_host" # 生产环境数据库地址 +PROD_DB_PORT="3306" # 数据库端口 +PROD_DB_USER="your_prod_user" # 数据库用户名 +PROD_DB_PASS="your_prod_password" # 数据库密码 +PROD_DB_NAME="ccdi" # 数据库名称 +``` ### 3. 验证配置 -检查配置文件格式: +查看配置是否正确: ```bash -cat db_config.conf | grep -E "^[A-Z]" -``` +# 查看导出脚本配置 +head -20 export_database.sh -确保所有必需的配置项都已填写。 +# 查看导入脚本配置 +head -30 import_database.sh +``` ## 数据库导出 @@ -301,9 +315,13 @@ SELECT name, person_type FROM ccdi_biz_intermediary LIMIT 10; **1. 配置数据库连接** ```bash -cp db_config.conf.template db_config.conf -nano db_config.conf -# 填写开发环境和生产环境数据库信息 +# 编辑导出脚本配置(开发环境) +nano export_database.sh +# 修改脚本顶部的 DB_HOST, DB_USER, DB_PASS 等配置 + +# 编辑导入脚本配置(生产环境) +nano import_database.sh +# 修改脚本顶部的 PROD_DB_HOST, PROD_DB_USER, PROD_DB_PASS 等配置 ``` **2. 导出数据库** @@ -319,6 +337,7 @@ head -20 doc/database/backup/ccdi_structure.sql **4. 先在测试环境验证** ```bash +# 确保已在 import_database.sh 中配置测试环境 ./import_database.sh test ``` @@ -347,29 +366,16 @@ head -20 doc/database/backup/ccdi_structure.sql - 安装 MySQL 客户端工具 - 或使用完整路径:`/usr/bin/mysqldump` -### 2. 配置文件不存在 +### 2. 数据库连接失败 -**错误信息**: `配置文件不存在: db_config.conf` +**错误信息**: 连接被拒绝或认证失败 **解决**: -```bash -cp db_config.conf.template db_config.conf -# 编辑 db_config.conf 填写实际配置 -``` - -### 3. 连接数据库失败 - -**可能原因**: -- 数据库地址、端口、用户名或密码错误 -- 防火墙阻止连接 -- 数据库服务未启动 - -**解决**: -- 检查配置文件中的连接信息 +- 检查脚本顶部的数据库配置是否正确 - 使用 mysql 命令手动测试连接 - 检查防火墙规则 -### 4. 导入时字符集乱码 +### 3. 导入时字符集乱码 **原因**: 未正确指定字符集 @@ -421,9 +427,9 @@ cp db_config.conf.template db_config.conf ## 注意事项 1. **安全性**: - - `db_config.conf` 包含敏感信息,已添加到 `.gitignore` - - 不要将配置文件提交到版本控制系统 - - 迁移完成后建议删除配置文件中的密码 + - 数据库配置已内置在脚本中,包含敏感信息 + - 不要将脚本提交到公开的版本控制系统 + - 迁移完成后建议删除脚本中的密码或使用占位符 2. **性能**: - 大数据库导出/导入可能需要较长时间 @@ -439,6 +445,11 @@ cp db_config.conf.template db_config.conf - 验证阶段重点检查中文数据 - 表结构文件不再包含显式的 COLLATE 配置(使用默认 utf8mb4_general_ci) +5. **脚本配置**: + - 首次使用前必须在脚本顶部配置数据库信息 + - 三个环境的配置是独立的,可以只配置需要的环境 + - 修改配置后无需其他操作即可使用 + ## 技术支持 如遇到问题: @@ -449,10 +460,8 @@ cp db_config.conf.template db_config.conf ## 相关文件 -- 导出脚本: `export_database.sh` -- 导入脚本: `import_database.sh` -- 配置模板: `db_config.conf.template` -- 实际配置: `db_config.conf` +- 导出脚本: `export_database.sh`(配置已内置) +- 导入脚本: `import_database.sh`(配置已内置) - 表结构文件: `doc/database/backup/ccdi_structure.sql` - 数据文件: `doc/database/backup/ccdi_data.sql` - 排序规则修改脚本: `doc/database/alter_collation_to_general_ci.sql` diff --git a/export_database.sh b/export_database.sh index 4d8367a..c22a5e6 100644 --- a/export_database.sh +++ b/export_database.sh @@ -5,6 +5,30 @@ 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' @@ -26,21 +50,6 @@ log_error() { # 脚本目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -CONFIG_FILE="${SCRIPT_DIR}/db_config.conf" - -# 检查配置文件 -check_config() { - if [ ! -f "$CONFIG_FILE" ]; then - log_error "配置文件不存在: $CONFIG_FILE" - log_info "请先复制配置模板: cp db_config.conf.template db_config.conf" - log_info "然后编辑 db_config.conf 填写实际数据库连接信息" - exit 1 - fi - - # 加载配置文件 - source "$CONFIG_FILE" - log_info "配置文件加载成功" -} # 检查 mysqldump 命令 check_mysqldump() { @@ -70,25 +79,25 @@ export_structure() { local temp_file=$(mktemp) # 导出表结构到临时文件 - mysqldump -h "$SOURCE_DB_HOST" \ - -P "$SOURCE_DB_PORT" \ - -u "$SOURCE_DB_USER" \ - -p"$SOURCE_DB_PASS" \ + mysqldump -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --no-data \ --skip-triggers \ --skip-add-drop-table \ - --default-character-set=utf8mb4 \ + --default-character-set=$CHARACTER_SET \ --single-transaction \ --max_allowed_packet=$MAX_ALLOWED_PACKET \ - "$SOURCE_DB_NAME" > "$temp_file" 2>/dev/null + "$DB_NAME" > "$temp_file" 2>/dev/null if [ $? -eq 0 ]; then # 添加字符集声明到文件头部 { echo "-- CCDI 数据库表结构" echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')" - echo "-- 源数据库: ${SOURCE_DB_HOST}:${SOURCE_DB_PORT}/${SOURCE_DB_NAME}" - echo "-- 字符集: utf8mb4" + echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}" + echo "-- 字符集: ${CHARACTER_SET}" echo "" echo "SET NAMES utf8mb4;" echo "SET CHARACTER SET utf8mb4;" @@ -119,26 +128,26 @@ export_data() { local temp_file=$(mktemp) # 导出数据到临时文件 - mysqldump -h "$SOURCE_DB_HOST" \ - -P "$SOURCE_DB_PORT" \ - -u "$SOURCE_DB_USER" \ - -p"$SOURCE_DB_PASS" \ + mysqldump -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --no-create-info \ --skip-triggers \ - --default-character-set=utf8mb4 \ + --default-character-set=$CHARACTER_SET \ --single-transaction \ --complete-insert \ --extended-insert \ --max_allowed_packet=$MAX_ALLOWED_PACKET \ - "$SOURCE_DB_NAME" > "$temp_file" 2>/dev/null + "$DB_NAME" > "$temp_file" 2>/dev/null if [ $? -eq 0 ]; then # 添加字符集声明到文件头部 { echo "-- CCDI 数据库数据" echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')" - echo "-- 源数据库: ${SOURCE_DB_HOST}:${SOURCE_DB_PORT}/${SOURCE_DB_NAME}" - echo "-- 字符集: utf8mb4" + echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}" + echo "-- 字符集: ${CHARACTER_SET}" echo "" echo "SET NAMES utf8mb4;" echo "SET CHARACTER SET utf8mb4;" @@ -200,7 +209,6 @@ verify_export() { export_database() { log_info "========== 开始导出数据库 ==========" - check_config check_mysqldump create_backup_dir export_structure @@ -225,9 +233,12 @@ show_usage() { 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 " 1. 已配置 db_config.conf 文件" - echo " 2. 已安装 MySQL 客户端工具(mysqldump)" + echo " 已安装 MySQL 客户端工具(mysqldump)" echo "" echo "示例:" echo " $0 # 导出数据库(默认)" diff --git a/import_database.sh b/import_database.sh index 6ccf589..10ea609 100644 --- a/import_database.sh +++ b/import_database.sh @@ -5,6 +5,40 @@ set -e # 遇到错误立即退出 +# ===================================================== +# 数据库配置(请根据实际情况修改) +# ===================================================== + +# 开发环境数据库配置 +DEV_DB_HOST="116.62.17.81" +DEV_DB_PORT="3306" +DEV_DB_USER="root" +DEV_DB_PASS="Kfcx@1234" +DEV_DB_NAME="ccdi" + +# 测试环境数据库配置 +TEST_DB_HOST="your_test_host" +TEST_DB_PORT="3306" +TEST_DB_USER="your_test_user" +TEST_DB_PASS="your_test_password" +TEST_DB_NAME="ccdi" + +# 生产环境数据库配置 +PROD_DB_HOST="your_production_host" +PROD_DB_PORT="3306" +PROD_DB_USER="your_production_user" +PROD_DB_PASS="your_production_password" +PROD_DB_NAME="ccdi" + +# 备份文件配置 +BACKUP_DIR="doc/database/backup" +STRUCTURE_FILE="ccdi_structure.sql" +DATA_FILE="ccdi_data.sql" + +# ===================================================== +# 脚本逻辑(无需修改) +# ===================================================== + # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' @@ -26,24 +60,6 @@ log_error() { # 脚本目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -CONFIG_FILE="${SCRIPT_DIR}/db_config.conf" -BACKUP_DIR="${SCRIPT_DIR}/doc/database/backup" -STRUCTURE_FILE="ccdi_structure.sql" -DATA_FILE="ccdi_data.sql" - -# 检查配置文件 -check_config() { - if [ ! -f "$CONFIG_FILE" ]; then - log_error "配置文件不存在: $CONFIG_FILE" - log_info "请先复制配置模板: cp db_config.conf.template db_config.conf" - log_info "然后编辑 db_config.conf 填写目标数据库连接信息" - exit 1 - fi - - # 加载配置文件 - source "$CONFIG_FILE" - log_info "配置文件加载成功" -} # 检查 mysql 命令 check_mysql() { @@ -64,13 +80,13 @@ check_backup_files() { if [ ! -f "$structure_file" ]; then log_error "表结构文件不存在: $structure_file" - log_info "请先执行导出: ./export_database.sh export" + log_info "请先执行导出: ./export_database.sh" exit 1 fi if [ ! -f "$data_file" ]; then log_error "数据文件不存在: $data_file" - log_info "请先执行导出: ./export_database.sh export" + log_info "请先执行导出: ./export_database.sh" exit 1 fi @@ -79,50 +95,56 @@ check_backup_files() { log_info "数据文件: $data_file ($(du -h "$data_file" | cut -f1))" } -# 导入表结构 -import_structure() { +# 获取环境数据库配置 +get_db_config() { local env_type=$1 - local db_host db_port db_user db_pass db_name case "$env_type" in - production|prod) - db_host="$PROD_DB_HOST" - db_port="$PROD_DB_PORT" - db_user="$PROD_DB_USER" - db_pass="$PROD_DB_PASS" - db_name="$PROD_DB_NAME" + dev|development) + DB_HOST="$DEV_DB_HOST" + DB_PORT="$DEV_DB_PORT" + DB_USER="$DEV_DB_USER" + DB_PASS="$DEV_DB_PASS" + DB_NAME="$DEV_DB_NAME" ;; test) - db_host="$TEST_DB_HOST" - db_port="$TEST_DB_PORT" - db_user="$TEST_DB_USER" - db_pass="$TEST_DB_PASS" - db_name="$TEST_DB_NAME" + DB_HOST="$TEST_DB_HOST" + DB_PORT="$TEST_DB_PORT" + DB_USER="$TEST_DB_USER" + DB_PASS="$TEST_DB_PASS" + DB_NAME="$TEST_DB_NAME" ;; - dev|development) - db_host="$SOURCE_DB_HOST" - db_port="$SOURCE_DB_PORT" - db_user="$SOURCE_DB_USER" - db_pass="$SOURCE_DB_PASS" - db_name="$SOURCE_DB_NAME" + production|prod) + DB_HOST="$PROD_DB_HOST" + DB_PORT="$PROD_DB_PORT" + DB_USER="$PROD_DB_USER" + DB_PASS="$PROD_DB_PASS" + DB_NAME="$PROD_DB_NAME" ;; *) log_error "未知的环境类型: $env_type" exit 1 ;; esac +} - log_info "导入表结构到 ${env_type} 环境: ${db_host}:${db_port}/${db_name}" +# 导入表结构 +import_structure() { + local env_type=$1 + + get_db_config "$env_type" + + log_info "导入表结构到 ${env_type} 环境: ${DB_HOST}:${DB_PORT}/${DB_NAME}" local structure_file="${BACKUP_DIR}/${STRUCTURE_FILE}" # 导入表结构 - mysql -h "$db_host" \ - -P "$db_port" \ - -u "$db_user" \ - -p"$db_pass" \ + mysql -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --default-character-set=utf8mb4 \ - "$db_name" < "$structure_file" 2>/dev/null + "$DB_NAME" < "$structure_file" 2>/dev/null if [ $? -eq 0 ]; then log_info "表结构导入成功" @@ -135,47 +157,20 @@ import_structure() { # 导入数据 import_data() { local env_type=$1 - local db_host db_port db_user db_pass db_name - case "$env_type" in - production|prod) - db_host="$PROD_DB_HOST" - db_port="$PROD_DB_PORT" - db_user="$PROD_DB_USER" - db_pass="$PROD_DB_PASS" - db_name="$PROD_DB_NAME" - ;; - test) - db_host="$TEST_DB_HOST" - db_port="$TEST_DB_PORT" - db_user="$TEST_DB_USER" - db_pass="$TEST_DB_PASS" - db_name="$TEST_DB_NAME" - ;; - dev|development) - db_host="$SOURCE_DB_HOST" - db_port="$SOURCE_DB_PORT" - db_user="$SOURCE_DB_USER" - db_pass="$SOURCE_DB_PASS" - db_name="$SOURCE_DB_NAME" - ;; - *) - log_error "未知的环境类型: $env_type" - exit 1 - ;; - esac + get_db_config "$env_type" - log_info "导入数据到 ${env_type} 环境: ${db_host}:${db_port}/${db_name}" + log_info "导入数据到 ${env_type} 环境: ${DB_HOST}:${DB_PORT}/${DB_NAME}" local data_file="${BACKUP_DIR}/${DATA_FILE}" # 导入数据 - mysql -h "$db_host" \ - -P "$db_port" \ - -u "$db_user" \ - -p"$db_pass" \ + mysql -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --default-character-set=utf8mb4 \ - "$db_name" < "$data_file" 2>/dev/null + "$DB_NAME" < "$data_file" 2>/dev/null if [ $? -eq 0 ]; then log_info "数据导入成功" @@ -188,65 +183,38 @@ import_data() { # 验证导入结果 verify_import() { local env_type=$1 - local db_host db_port db_user db_pass db_name - case "$env_type" in - production|prod) - db_host="$PROD_DB_HOST" - db_port="$PROD_DB_PORT" - db_user="$PROD_DB_USER" - db_pass="$PROD_DB_PASS" - db_name="$PROD_DB_NAME" - ;; - test) - db_host="$TEST_DB_HOST" - db_port="$TEST_DB_PORT" - db_user="$TEST_DB_USER" - db_pass="$TEST_DB_PASS" - db_name="$TEST_DB_NAME" - ;; - dev|development) - db_host="$SOURCE_DB_HOST" - db_port="$SOURCE_DB_PORT" - db_user="$SOURCE_DB_USER" - db_pass="$SOURCE_DB_PASS" - db_name="$SOURCE_DB_NAME" - ;; - *) - log_error "未知的环境类型: $env_type" - exit 1 - ;; - esac + get_db_config "$env_type" log_info "验证导入结果..." # 查询表数量 - local table_count=$(mysql -h "$db_host" \ - -P "$db_port" \ - -u "$db_user" \ - -p"$db_pass" \ + local table_count=$(mysql -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --default-character-set=utf8mb4 \ - -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$db_name';" "$db_name" 2>/dev/null) + -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$DB_NAME';" "$DB_NAME" 2>/dev/null) log_info "目标数据库表数量: $table_count" # 查询关键表行数(示例:sys_user 表) - local user_count=$(mysql -h "$db_host" \ - -P "$db_port" \ - -u "$db_user" \ - -p"$db_pass" \ + local user_count=$(mysql -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --default-character-set=utf8mb4 \ - -N -e "SELECT COUNT(*) FROM sys_user;" "$db_name" 2>/dev/null) + -N -e "SELECT COUNT(*) FROM sys_user;" "$DB_NAME" 2>/dev/null) log_info "sys_user 表数据行数: $user_count" # 检查数据库字符集 - local db_charset=$(mysql -h "$db_host" \ - -P "$db_port" \ - -u "$db_user" \ - -p"$db_pass" \ + local db_charset=$(mysql -h "$DB_HOST" \ + -P "$DB_PORT" \ + -u "$DB_USER" \ + -p"$DB_PASS" \ --default-character-set=utf8mb4 \ - -N -e "SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.schemata WHERE schema_name='$db_name';" 2>/dev/null) + -N -e "SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.schemata WHERE schema_name='$DB_NAME';" 2>/dev/null) log_info "数据库字符集: $db_charset" } @@ -263,7 +231,6 @@ import_database() { log_info "========== 开始导入数据库到 ${env_type} 环境 ==========" - check_config check_mysql check_backup_files import_structure "$env_type" @@ -278,7 +245,7 @@ show_usage() { echo "用法: $0 " echo "" echo "环境:" - echo " dev, development 开发环境(源数据库)" + echo " dev, development 开发环境" echo " test 测试环境" echo " production, prod 生产环境" echo "" @@ -288,9 +255,13 @@ show_usage() { echo " - ccdi_structure.sql (表结构)" echo " - ccdi_data.sql (数据)" echo "" + echo "配置:" + echo " 数据库配置已内置在脚本顶部,请根据实际情况修改" + echo " 配置项: DEV_DB_*, TEST_DB_*, PROD_DB_*" + echo "" echo "前置条件:" - echo " 1. 已执行 ./export_database.sh export 导出数据库" - echo " 2. 已配置 db_config.conf 文件" + echo " 1. 已执行 ./export_database.sh 导出数据库" + echo " 2. 已在脚本顶部配置目标环境数据库信息" echo "" echo "示例:" echo " $0 test # 导入到测试环境"