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>  # 导入到目标环境
This commit is contained in:
wkc
2026-02-28 15:25:42 +08:00
parent 79f00f30d8
commit 46dd386919
5 changed files with 222 additions and 231 deletions

View File

@@ -1,5 +1,5 @@
-- CCDI 数据库数据 -- CCDI 数据库数据
-- 导出时间: 2026-02-28 14:39:40 -- 导出时间: 2026-02-28 15:23:04
-- 源数据库: 116.62.17.81:3306/ccdi -- 源数据库: 116.62.17.81:3306/ccdi
-- 字符集: utf8mb4 -- 字符集: utf8mb4
@@ -445,6 +445,6 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!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; SET FOREIGN_KEY_CHECKS=1;

View File

@@ -1,5 +1,5 @@
-- CCDI 数据库表结构 -- CCDI 数据库表结构
-- 导出时间: 2026-02-28 14:39:30 -- 导出时间: 2026-02-28 15:22:54
-- 源数据库: 116.62.17.81:3306/ccdi -- 源数据库: 116.62.17.81:3306/ccdi
-- 字符集: utf8mb4 -- 字符集: utf8mb4
@@ -1092,4 +1092,4 @@ CREATE TABLE `sys_user_role` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!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

View File

@@ -11,28 +11,31 @@
1. **export_database.sh** - 数据库导出脚本 1. **export_database.sh** - 数据库导出脚本
- 从开发环境导出数据库 - 从开发环境导出数据库
- 生成表结构和数据文件到 `doc/database/backup/` 文件夹 - 生成表结构和数据文件到 `doc/database/backup/` 文件夹
- 配置已内置在脚本顶部
2. **import_database.sh** - 数据库导入脚本 2. **import_database.sh** - 数据库导入脚本
-`doc/database/backup/` 文件夹读取备份文件 -`doc/database/backup/` 文件夹读取备份文件
- 导入到指定的目标环境dev/test/prod - 导入到指定的目标环境dev/test/prod
- 配置已内置在脚本顶部
## 文件结构 ## 文件结构
``` ```
项目根目录/ 项目根目录/
├── export_database.sh # 导出脚本 ├── export_database.sh # 导出脚本(配置已内置)
├── import_database.sh # 导入脚本 ├── import_database.sh # 导入脚本(配置已内置)
├── db_config.conf.template # 配置模板
├── db_config.conf # 实际配置(不提交到 Git
└── doc/ └── doc/
└── database/ └── database/
├── backup/ # 备份文件夹 ├── 数据库迁移操作指南.md # 本文档
│ ├── .gitkeep ├── alter_collation_to_general_ci.sql # 排序规则修改脚本
│ ├── ccdi_structure.sql # 表结构(~60KB └── backup/ # 备份文件夹
── ccdi_data.sql # 数据文件(~5.7MB ── .gitkeep
└── alter_collation_to_general_ci.sql # 排序规则修改脚本 ├── ccdi_structure.sql # 表结构(~60KB
└── ccdi_data.sql # 数据文件(~5.7MB
``` ```
**注意:** 数据库配置已直接内置在脚本中,无需额外的配置文件。
## 前置条件 ## 前置条件
### 必需工具 ### 必需工具
@@ -54,49 +57,60 @@ mysql --version
## 配置步骤 ## 配置步骤
### 1. 创建配置文件 ### 1. 修改导出脚本配置
编辑 `export_database.sh` 脚本顶部配置:
```bash ```bash
# 复制配置模板 # 源数据库配置(开发环境)
cp db_config.conf.template db_config.conf DB_HOST="116.62.17.81" # 数据库地址
DB_PORT="3306" # 数据库端口
# 编辑配置文件 DB_USER="root" # 数据库用户名
nano db_config.conf # 或使用其他编辑器 DB_PASS="Kfcx@1234" # 数据库密码
DB_NAME="ccdi" # 数据库名称
``` ```
### 2. 填写配置信息 ### 2. 修改导入脚本配置
编辑 `db_config.conf` 文件,填写以下信息 编辑 `import_database.sh` 脚本顶部配置
**源数据库(开发环境:** **开发环境:**
- `SOURCE_DB_HOST`: 开发环境数据库地址 ```bash
- `SOURCE_DB_PORT`: 数据库端口(默认 3306 DEV_DB_HOST="116.62.17.81" # 开发环境数据库地址
- `SOURCE_DB_USER`: 数据库用户名 DEV_DB_PORT="3306" # 数据库端口
- `SOURCE_DB_PASS`: 数据库密码 DEV_DB_USER="root" # 数据库用户名
- `SOURCE_DB_NAME`: 数据库名称ccdi DEV_DB_PASS="Kfcx@1234" # 数据库密码
DEV_DB_NAME="ccdi" # 数据库名称
```
**生产环境数据库:** **测试环境:**
- `PROD_DB_HOST`: 生产环境数据库地址 ```bash
- `PROD_DB_PORT`: 数据库端口 TEST_DB_HOST="your_test_host" # 测试环境数据库地址
- `PROD_DB_USER`: 生产环境数据库用户名 TEST_DB_PORT="3306" # 数据库端口
- `PROD_DB_PASS`: 生产环境数据库密码 TEST_DB_USER="your_test_user" # 数据库用户名
- `PROD_DB_NAME`: 数据库名称ccdi TEST_DB_PASS="your_test_password" # 数据库密码
TEST_DB_NAME="ccdi" # 数据库名称
```
**测试环境数据库(可选):** **生产环境:**
- `TEST_DB_HOST`: 测试环境数据库地址 ```bash
- `TEST_DB_PORT`: 数据库端口 PROD_DB_HOST="your_prod_host" # 生产环境数据库地址
- `TEST_DB_USER`: 测试环境数据库用户名 PROD_DB_PORT="3306" # 数据库端口
- `TEST_DB_PASS`: 测试环境数据库密码 PROD_DB_USER="your_prod_user" # 数据库用户名
- `TEST_DB_NAME`: 数据库名称ccdi PROD_DB_PASS="your_prod_password" # 数据库密码
PROD_DB_NAME="ccdi" # 数据库名称
```
### 3. 验证配置 ### 3. 验证配置
检查配置文件格式 查看配置是否正确
```bash ```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. 配置数据库连接** **1. 配置数据库连接**
```bash ```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. 导出数据库** **2. 导出数据库**
@@ -319,6 +337,7 @@ head -20 doc/database/backup/ccdi_structure.sql
**4. 先在测试环境验证** **4. 先在测试环境验证**
```bash ```bash
# 确保已在 import_database.sh 中配置测试环境
./import_database.sh test ./import_database.sh test
``` ```
@@ -347,29 +366,16 @@ head -20 doc/database/backup/ccdi_structure.sql
- 安装 MySQL 客户端工具 - 安装 MySQL 客户端工具
- 或使用完整路径:`/usr/bin/mysqldump` - 或使用完整路径:`/usr/bin/mysqldump`
### 2. 配置文件不存在 ### 2. 数据库连接失败
**错误信息**: `配置文件不存在: db_config.conf` **错误信息**: 连接被拒绝或认证失败
**解决**: **解决**:
```bash - 检查脚本顶部的数据库配置是否正确
cp db_config.conf.template db_config.conf
# 编辑 db_config.conf 填写实际配置
```
### 3. 连接数据库失败
**可能原因**:
- 数据库地址、端口、用户名或密码错误
- 防火墙阻止连接
- 数据库服务未启动
**解决**:
- 检查配置文件中的连接信息
- 使用 mysql 命令手动测试连接 - 使用 mysql 命令手动测试连接
- 检查防火墙规则 - 检查防火墙规则
### 4. 导入时字符集乱码 ### 3. 导入时字符集乱码
**原因**: 未正确指定字符集 **原因**: 未正确指定字符集
@@ -421,9 +427,9 @@ cp db_config.conf.template db_config.conf
## 注意事项 ## 注意事项
1. **安全性**: 1. **安全性**:
- `db_config.conf` 包含敏感信息,已添加到 `.gitignore` - 数据库配置已内置在脚本中,包含敏感信息
- 不要将配置文件提交到版本控制系统 - 不要将脚本提交到公开的版本控制系统
- 迁移完成后建议删除配置文件中的密码 - 迁移完成后建议删除脚本中的密码或使用占位符
2. **性能**: 2. **性能**:
- 大数据库导出/导入可能需要较长时间 - 大数据库导出/导入可能需要较长时间
@@ -439,6 +445,11 @@ cp db_config.conf.template db_config.conf
- 验证阶段重点检查中文数据 - 验证阶段重点检查中文数据
- 表结构文件不再包含显式的 COLLATE 配置(使用默认 utf8mb4_general_ci - 表结构文件不再包含显式的 COLLATE 配置(使用默认 utf8mb4_general_ci
5. **脚本配置**:
- 首次使用前必须在脚本顶部配置数据库信息
- 三个环境的配置是独立的,可以只配置需要的环境
- 修改配置后无需其他操作即可使用
## 技术支持 ## 技术支持
如遇到问题: 如遇到问题:
@@ -449,10 +460,8 @@ cp db_config.conf.template db_config.conf
## 相关文件 ## 相关文件
- 导出脚本: `export_database.sh` - 导出脚本: `export_database.sh`(配置已内置)
- 导入脚本: `import_database.sh` - 导入脚本: `import_database.sh`(配置已内置)
- 配置模板: `db_config.conf.template`
- 实际配置: `db_config.conf`
- 表结构文件: `doc/database/backup/ccdi_structure.sql` - 表结构文件: `doc/database/backup/ccdi_structure.sql`
- 数据文件: `doc/database/backup/ccdi_data.sql` - 数据文件: `doc/database/backup/ccdi_data.sql`
- 排序规则修改脚本: `doc/database/alter_collation_to_general_ci.sql` - 排序规则修改脚本: `doc/database/alter_collation_to_general_ci.sql`

View File

@@ -5,6 +5,30 @@
set -e # 遇到错误立即退出 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' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
@@ -26,21 +50,6 @@ log_error() {
# 脚本目录 # 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 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 命令 # 检查 mysqldump 命令
check_mysqldump() { check_mysqldump() {
@@ -70,25 +79,25 @@ export_structure() {
local temp_file=$(mktemp) local temp_file=$(mktemp)
# 导出表结构到临时文件 # 导出表结构到临时文件
mysqldump -h "$SOURCE_DB_HOST" \ mysqldump -h "$DB_HOST" \
-P "$SOURCE_DB_PORT" \ -P "$DB_PORT" \
-u "$SOURCE_DB_USER" \ -u "$DB_USER" \
-p"$SOURCE_DB_PASS" \ -p"$DB_PASS" \
--no-data \ --no-data \
--skip-triggers \ --skip-triggers \
--skip-add-drop-table \ --skip-add-drop-table \
--default-character-set=utf8mb4 \ --default-character-set=$CHARACTER_SET \
--single-transaction \ --single-transaction \
--max_allowed_packet=$MAX_ALLOWED_PACKET \ --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 if [ $? -eq 0 ]; then
# 添加字符集声明到文件头部 # 添加字符集声明到文件头部
{ {
echo "-- CCDI 数据库表结构" echo "-- CCDI 数据库表结构"
echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "-- 源数据库: ${SOURCE_DB_HOST}:${SOURCE_DB_PORT}/${SOURCE_DB_NAME}" echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
echo "-- 字符集: utf8mb4" echo "-- 字符集: ${CHARACTER_SET}"
echo "" echo ""
echo "SET NAMES utf8mb4;" echo "SET NAMES utf8mb4;"
echo "SET CHARACTER SET utf8mb4;" echo "SET CHARACTER SET utf8mb4;"
@@ -119,26 +128,26 @@ export_data() {
local temp_file=$(mktemp) local temp_file=$(mktemp)
# 导出数据到临时文件 # 导出数据到临时文件
mysqldump -h "$SOURCE_DB_HOST" \ mysqldump -h "$DB_HOST" \
-P "$SOURCE_DB_PORT" \ -P "$DB_PORT" \
-u "$SOURCE_DB_USER" \ -u "$DB_USER" \
-p"$SOURCE_DB_PASS" \ -p"$DB_PASS" \
--no-create-info \ --no-create-info \
--skip-triggers \ --skip-triggers \
--default-character-set=utf8mb4 \ --default-character-set=$CHARACTER_SET \
--single-transaction \ --single-transaction \
--complete-insert \ --complete-insert \
--extended-insert \ --extended-insert \
--max_allowed_packet=$MAX_ALLOWED_PACKET \ --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 if [ $? -eq 0 ]; then
# 添加字符集声明到文件头部 # 添加字符集声明到文件头部
{ {
echo "-- CCDI 数据库数据" echo "-- CCDI 数据库数据"
echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "-- 导出时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "-- 源数据库: ${SOURCE_DB_HOST}:${SOURCE_DB_PORT}/${SOURCE_DB_NAME}" echo "-- 源数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
echo "-- 字符集: utf8mb4" echo "-- 字符集: ${CHARACTER_SET}"
echo "" echo ""
echo "SET NAMES utf8mb4;" echo "SET NAMES utf8mb4;"
echo "SET CHARACTER SET utf8mb4;" echo "SET CHARACTER SET utf8mb4;"
@@ -200,7 +209,6 @@ verify_export() {
export_database() { export_database() {
log_info "========== 开始导出数据库 ==========" log_info "========== 开始导出数据库 =========="
check_config
check_mysqldump check_mysqldump
create_backup_dir create_backup_dir
export_structure export_structure
@@ -225,9 +233,12 @@ show_usage() {
echo " - ccdi_structure.sql (表结构)" echo " - ccdi_structure.sql (表结构)"
echo " - ccdi_data.sql (数据)" echo " - ccdi_data.sql (数据)"
echo "" echo ""
echo "配置:"
echo " 数据库配置已内置在脚本顶部,请根据实际情况修改"
echo " 配置项: DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_NAME"
echo ""
echo "前置条件:" echo "前置条件:"
echo " 1. 已配置 db_config.conf 文件" echo " 已安装 MySQL 客户端工具mysqldump"
echo " 2. 已安装 MySQL 客户端工具mysqldump"
echo "" echo ""
echo "示例:" echo "示例:"
echo " $0 # 导出数据库(默认)" echo " $0 # 导出数据库(默认)"

View File

@@ -5,6 +5,40 @@
set -e # 遇到错误立即退出 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' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
@@ -26,24 +60,6 @@ log_error() {
# 脚本目录 # 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 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 命令 # 检查 mysql 命令
check_mysql() { check_mysql() {
@@ -64,13 +80,13 @@ check_backup_files() {
if [ ! -f "$structure_file" ]; then if [ ! -f "$structure_file" ]; then
log_error "表结构文件不存在: $structure_file" log_error "表结构文件不存在: $structure_file"
log_info "请先执行导出: ./export_database.sh export" log_info "请先执行导出: ./export_database.sh"
exit 1 exit 1
fi fi
if [ ! -f "$data_file" ]; then if [ ! -f "$data_file" ]; then
log_error "数据文件不存在: $data_file" log_error "数据文件不存在: $data_file"
log_info "请先执行导出: ./export_database.sh export" log_info "请先执行导出: ./export_database.sh"
exit 1 exit 1
fi fi
@@ -79,50 +95,56 @@ check_backup_files() {
log_info "数据文件: $data_file ($(du -h "$data_file" | cut -f1))" log_info "数据文件: $data_file ($(du -h "$data_file" | cut -f1))"
} }
# 导入表结构 # 获取环境数据库配置
import_structure() { get_db_config() {
local env_type=$1 local env_type=$1
local db_host db_port db_user db_pass db_name
case "$env_type" in case "$env_type" in
production|prod) dev|development)
db_host="$PROD_DB_HOST" DB_HOST="$DEV_DB_HOST"
db_port="$PROD_DB_PORT" DB_PORT="$DEV_DB_PORT"
db_user="$PROD_DB_USER" DB_USER="$DEV_DB_USER"
db_pass="$PROD_DB_PASS" DB_PASS="$DEV_DB_PASS"
db_name="$PROD_DB_NAME" DB_NAME="$DEV_DB_NAME"
;; ;;
test) test)
db_host="$TEST_DB_HOST" DB_HOST="$TEST_DB_HOST"
db_port="$TEST_DB_PORT" DB_PORT="$TEST_DB_PORT"
db_user="$TEST_DB_USER" DB_USER="$TEST_DB_USER"
db_pass="$TEST_DB_PASS" DB_PASS="$TEST_DB_PASS"
db_name="$TEST_DB_NAME" DB_NAME="$TEST_DB_NAME"
;; ;;
dev|development) production|prod)
db_host="$SOURCE_DB_HOST" DB_HOST="$PROD_DB_HOST"
db_port="$SOURCE_DB_PORT" DB_PORT="$PROD_DB_PORT"
db_user="$SOURCE_DB_USER" DB_USER="$PROD_DB_USER"
db_pass="$SOURCE_DB_PASS" DB_PASS="$PROD_DB_PASS"
db_name="$SOURCE_DB_NAME" DB_NAME="$PROD_DB_NAME"
;; ;;
*) *)
log_error "未知的环境类型: $env_type" log_error "未知的环境类型: $env_type"
exit 1 exit 1
;; ;;
esac 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}" local structure_file="${BACKUP_DIR}/${STRUCTURE_FILE}"
# 导入表结构 # 导入表结构
mysql -h "$db_host" \ mysql -h "$DB_HOST" \
-P "$db_port" \ -P "$DB_PORT" \
-u "$db_user" \ -u "$DB_USER" \
-p"$db_pass" \ -p"$DB_PASS" \
--default-character-set=utf8mb4 \ --default-character-set=utf8mb4 \
"$db_name" < "$structure_file" 2>/dev/null "$DB_NAME" < "$structure_file" 2>/dev/null
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
log_info "表结构导入成功" log_info "表结构导入成功"
@@ -135,47 +157,20 @@ import_structure() {
# 导入数据 # 导入数据
import_data() { import_data() {
local env_type=$1 local env_type=$1
local db_host db_port db_user db_pass db_name
case "$env_type" in get_db_config "$env_type"
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
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}" local data_file="${BACKUP_DIR}/${DATA_FILE}"
# 导入数据 # 导入数据
mysql -h "$db_host" \ mysql -h "$DB_HOST" \
-P "$db_port" \ -P "$DB_PORT" \
-u "$db_user" \ -u "$DB_USER" \
-p"$db_pass" \ -p"$DB_PASS" \
--default-character-set=utf8mb4 \ --default-character-set=utf8mb4 \
"$db_name" < "$data_file" 2>/dev/null "$DB_NAME" < "$data_file" 2>/dev/null
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
log_info "数据导入成功" log_info "数据导入成功"
@@ -188,65 +183,38 @@ import_data() {
# 验证导入结果 # 验证导入结果
verify_import() { verify_import() {
local env_type=$1 local env_type=$1
local db_host db_port db_user db_pass db_name
case "$env_type" in get_db_config "$env_type"
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
log_info "验证导入结果..." log_info "验证导入结果..."
# 查询表数量 # 查询表数量
local table_count=$(mysql -h "$db_host" \ local table_count=$(mysql -h "$DB_HOST" \
-P "$db_port" \ -P "$DB_PORT" \
-u "$db_user" \ -u "$DB_USER" \
-p"$db_pass" \ -p"$DB_PASS" \
--default-character-set=utf8mb4 \ --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" log_info "目标数据库表数量: $table_count"
# 查询关键表行数示例sys_user 表) # 查询关键表行数示例sys_user 表)
local user_count=$(mysql -h "$db_host" \ local user_count=$(mysql -h "$DB_HOST" \
-P "$db_port" \ -P "$DB_PORT" \
-u "$db_user" \ -u "$DB_USER" \
-p"$db_pass" \ -p"$DB_PASS" \
--default-character-set=utf8mb4 \ --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" log_info "sys_user 表数据行数: $user_count"
# 检查数据库字符集 # 检查数据库字符集
local db_charset=$(mysql -h "$db_host" \ local db_charset=$(mysql -h "$DB_HOST" \
-P "$db_port" \ -P "$DB_PORT" \
-u "$db_user" \ -u "$DB_USER" \
-p"$db_pass" \ -p"$DB_PASS" \
--default-character-set=utf8mb4 \ --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" log_info "数据库字符集: $db_charset"
} }
@@ -263,7 +231,6 @@ import_database() {
log_info "========== 开始导入数据库到 ${env_type} 环境 ==========" log_info "========== 开始导入数据库到 ${env_type} 环境 =========="
check_config
check_mysql check_mysql
check_backup_files check_backup_files
import_structure "$env_type" import_structure "$env_type"
@@ -278,7 +245,7 @@ show_usage() {
echo "用法: $0 <environment>" echo "用法: $0 <environment>"
echo "" echo ""
echo "环境:" echo "环境:"
echo " dev, development 开发环境(源数据库)" echo " dev, development 开发环境"
echo " test 测试环境" echo " test 测试环境"
echo " production, prod 生产环境" echo " production, prod 生产环境"
echo "" echo ""
@@ -288,9 +255,13 @@ show_usage() {
echo " - ccdi_structure.sql (表结构)" echo " - ccdi_structure.sql (表结构)"
echo " - ccdi_data.sql (数据)" echo " - ccdi_data.sql (数据)"
echo "" echo ""
echo "配置:"
echo " 数据库配置已内置在脚本顶部,请根据实际情况修改"
echo " 配置项: DEV_DB_*, TEST_DB_*, PROD_DB_*"
echo ""
echo "前置条件:" echo "前置条件:"
echo " 1. 已执行 ./export_database.sh export 导出数据库" echo " 1. 已执行 ./export_database.sh 导出数据库"
echo " 2. 已配置 db_config.conf 文件" echo " 2. 已在脚本顶部配置目标环境数据库信息"
echo "" echo ""
echo "示例:" echo "示例:"
echo " $0 test # 导入到测试环境" echo " $0 test # 导入到测试环境"