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

@@ -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 <environment>"
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 # 导入到测试环境"