fix: 修复 MySQL 连接配置并合并数据库迁移文件

- 修复 MySQL 连接配置
  - 添加 allowPublicKeyRetrieval=true 参数(解决 Public Key Retrieval 错误)
  - 将 characterEncoding=utf8mb4 改为 utf8(兼容性修复)
  - 更新所有配置文件:docker-compose.yml, deploy.sh, docs/DEPLOYMENT.md

- 合并数据库迁移文件
  - 将 V1, V2, V3 迁移文件合并为一个 V1__init_database.sql
  - 删除 V2__create_proxy_config_table.sql
  - 删除 V3__rename_copy_trading_accounts_to_wallet_accounts.sql
  - 新的 V1 包含所有表结构(11 个表)
This commit is contained in:
WrBug
2025-12-03 05:16:44 +08:00
parent 58cc096a77
commit bb671bfd89
8 changed files with 27 additions and 63 deletions
+1 -1
View File
@@ -131,7 +131,7 @@ deploy_docker() {
warn ".env 文件不存在,创建示例文件..." warn ".env 文件不存在,创建示例文件..."
cat > .env <<EOF cat > .env <<EOF
# 数据库配置 # 数据库配置
DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4 DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD=your_password_here DB_PASSWORD=your_password_here
+1 -1
View File
@@ -10,7 +10,7 @@ services:
- "${SERVER_PORT:-8000}:8000" - "${SERVER_PORT:-8000}:8000"
environment: environment:
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod} - SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod}
- DB_URL=${DB_URL:-jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4} - DB_URL=${DB_URL:-jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true}
- DB_USERNAME=${DB_USERNAME:-root} - DB_USERNAME=${DB_USERNAME:-root}
- DB_PASSWORD=${DB_PASSWORD:-} - DB_PASSWORD=${DB_PASSWORD:-}
- SERVER_PORT=8000 - SERVER_PORT=8000
@@ -209,3 +209,23 @@ CREATE TABLE IF NOT EXISTS users (
INDEX idx_username (username), INDEX idx_username (username),
INDEX idx_is_default (is_default) INDEX idx_is_default (is_default)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表(JWT登录鉴权)'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表(JWT登录鉴权)';
-- ============================================
-- 11. 创建代理配置表
-- ============================================
CREATE TABLE IF NOT EXISTS proxy_config (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
type VARCHAR(20) NOT NULL COMMENT '代理类型:HTTP, CLASH, SS',
enabled BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否启用',
host VARCHAR(255) NULL COMMENT '代理主机(HTTP代理)',
port INT NULL COMMENT '代理端口(HTTP代理)',
username VARCHAR(100) NULL COMMENT '代理用户名(HTTP代理,可选)',
password VARCHAR(255) NULL COMMENT '代理密码(HTTP代理,可选,BCrypt加密)',
subscription_url VARCHAR(500) NULL COMMENT '订阅链接(Clash/SS代理)',
subscription_config TEXT NULL COMMENT '订阅配置内容(Clash/SS代理,JSON格式)',
last_subscription_update BIGINT NULL COMMENT '最后订阅更新时间(毫秒时间戳)',
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
INDEX idx_type (type),
INDEX idx_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代理配置表';
@@ -1,20 +0,0 @@
-- ============================================
-- 创建代理配置表
-- ============================================
CREATE TABLE IF NOT EXISTS proxy_config (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
type VARCHAR(20) NOT NULL COMMENT '代理类型:HTTP, CLASH, SS',
enabled BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否启用',
host VARCHAR(255) NULL COMMENT '代理主机(HTTP代理)',
port INT NULL COMMENT '代理端口(HTTP代理)',
username VARCHAR(100) NULL COMMENT '代理用户名(HTTP代理,可选)',
password VARCHAR(255) NULL COMMENT '代理密码(HTTP代理,可选,BCrypt加密)',
subscription_url VARCHAR(500) NULL COMMENT '订阅链接(Clash/SS代理)',
subscription_config TEXT NULL COMMENT '订阅配置内容(Clash/SS代理,JSON格式)',
last_subscription_update BIGINT NULL COMMENT '最后订阅更新时间(毫秒时间戳)',
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
INDEX idx_type (type),
INDEX idx_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代理配置表';
@@ -1,36 +0,0 @@
-- ============================================
-- 重命名账户表:copy_trading_accounts -> wallet_accounts
-- ============================================
-- 检查表是否存在,如果存在则重命名
-- 注意:此迁移脚本假设表已经存在(从 V1 迁移创建)
-- 1. 查找外键约束名称并删除
SET @fk_name = NULL;
SELECT CONSTRAINT_NAME INTO @fk_name
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'copy_trading'
AND COLUMN_NAME = 'account_id'
AND REFERENCED_TABLE_NAME = 'copy_trading_accounts'
LIMIT 1;
-- 2. 如果找到外键,删除它
SET @drop_fk_sql = IF(@fk_name IS NOT NULL,
CONCAT('ALTER TABLE copy_trading DROP FOREIGN KEY `', @fk_name, '`'),
'SELECT 1');
PREPARE stmt FROM @drop_fk_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3. 重命名表
RENAME TABLE copy_trading_accounts TO wallet_accounts;
-- 4. 重新添加外键约束
ALTER TABLE copy_trading
ADD CONSTRAINT fk_copy_trading_account_id
FOREIGN KEY (account_id) REFERENCES wallet_accounts(id) ON DELETE CASCADE;
-- 5. 更新表注释
ALTER TABLE wallet_accounts COMMENT = '钱包账户表';
+1 -1
View File
@@ -45,7 +45,7 @@ create_env_file() {
warn ".env 文件不存在,创建示例文件..." warn ".env 文件不存在,创建示例文件..."
cat > .env <<EOF cat > .env <<EOF
# 数据库配置 # 数据库配置
DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4 DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD=your_password_here DB_PASSWORD=your_password_here
+1 -1
View File
@@ -10,7 +10,7 @@ services:
- "${SERVER_PORT:-80}:80" - "${SERVER_PORT:-80}:80"
environment: environment:
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod} - SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod}
- DB_URL=${DB_URL:-jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4} - DB_URL=${DB_URL:-jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true}
- DB_USERNAME=${DB_USERNAME:-root} - DB_USERNAME=${DB_USERNAME:-root}
- DB_PASSWORD=${DB_PASSWORD:-} - DB_PASSWORD=${DB_PASSWORD:-}
- SERVER_PORT=8000 - SERVER_PORT=8000
+3 -3
View File
@@ -41,7 +41,7 @@
```bash ```bash
# 创建 .env 文件 # 创建 .env 文件
cat > .env <<EOF cat > .env <<EOF
DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4 DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD=your_password_here DB_PASSWORD=your_password_here
SPRING_PROFILES_ACTIVE=prod SPRING_PROFILES_ACTIVE=prod
@@ -180,7 +180,7 @@ cd backend
```bash ```bash
# 创建 .env 文件 # 创建 .env 文件
cat > .env <<EOF cat > .env <<EOF
DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4 DB_URL=jdbc:mysql://mysql:3306/polyhermes?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD=your_password_here DB_PASSWORD=your_password_here
SPRING_PROFILES_ACTIVE=prod SPRING_PROFILES_ACTIVE=prod
@@ -213,7 +213,7 @@ docker run -d \
--name polyhermes-backend \ --name polyhermes-backend \
-p 8000:8000 \ -p 8000:8000 \
-e SPRING_PROFILES_ACTIVE=prod \ -e SPRING_PROFILES_ACTIVE=prod \
-e DB_URL=jdbc:mysql://host.docker.internal:3306/polyhermes?useSSL=false \ -e DB_URL=jdbc:mysql://host.docker.internal:3306/polyhermes?useSSL=false&allowPublicKeyRetrieval=true \
-e DB_USERNAME=root \ -e DB_USERNAME=root \
-e DB_PASSWORD=your_password \ -e DB_PASSWORD=your_password \
-e JWT_SECRET=your-jwt-secret \ -e JWT_SECRET=your-jwt-secret \