切换后端与lsfx-mock默认数据库到MySQL8

This commit is contained in:
wkc
2026-03-27 15:29:40 +08:00
parent 3f98d59741
commit e44e632bb6
5 changed files with 209 additions and 1 deletions

View File

@@ -0,0 +1,70 @@
# 后端切换到 MySQL 8.0 实施记录
## 变更背景
- 变更日期2026-03-27
- 目标:将后端开发环境数据库从 `116.62.17.81:3306/ccdi` 切换到 `116.62.17.81:3307/ccdi`
- 原因:`3307` 实例已完成 MySQL 8.0 数据迁移,需要让后端默认连接 MySQL 8.0
## 变更内容
### 配置调整
- 修改 `ruoyi-admin/src/main/resources/application-dev.yml`
-`spring.datasource.druid.master.url` 从:
```text
jdbc:mysql://116.62.17.81:3306/ccdi...
```
- 调整为:
```text
jdbc:mysql://116.62.17.81:3307/ccdi...
```
### 影响范围
- `application.yml` 当前激活 profile 为 `dev`,因此后端默认启动将直接连接 MySQL 8.0
- `bin/mysql_utf8_exec.sh` 会读取 `application-dev.yml`,后续通过该脚本执行 SQL 也将默认落到 `3307`
## 验证方式
1. 使用 MySQL 客户端确认 `116.62.17.81:3307/ccdi` 可正常访问。
2. 重新打包后端:
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
3. 使用独立测试端口启动后端:
```bash
java -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=62319
```
4. 访问 `http://127.0.0.1:62319/swagger-ui.html`,确认服务启动成功。
5. 调用真实登录接口验证数据库读写链路:
```bash
curl -s -X POST 'http://127.0.0.1:62319/login/test' \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}'
```
6. 验证完成后关闭测试过程中启动的后端进程。
## 验证结果
- 配置已切换到 `3307`
- `mvn -pl ruoyi-admin -am package -DskipTests` 执行成功
- 后端在 `62319` 端口启动成功,日志中 `DruidDataSource` 初始化完成Spring Boot 正常启动
- `swagger-ui.html` 可访问HTTP 状态为 `302`
- `POST /login/test` 返回:
```json
{"msg":"操作成功","code":200,"token":"<JWT>"}
```
- 启动日志可见 `sys_user` 查询、登录信息更新与登录日志写入,说明后端已通过 MySQL 8.0 执行真实数据库读写
- 测试进程已在验证后关闭

View File

@@ -0,0 +1,32 @@
# lsfx-mock 同步 MySQL 8.0 实施记录
## 变更背景
- 变更日期2026-03-27
- 目标:确认 `lsfx-mock-server` 与主项目开发库保持一致,默认连接 `116.62.17.81:3307/ccdi`
## 现状确认
- `lsfx-mock-server/config/settings.py` 并未单独写死数据库端口
- Mock 默认数据库连接来自主项目 `ruoyi-admin/src/main/resources/application-dev.yml`
- 因此前端后端主配置切换到 `3307`Mock 侧默认值会自动同步到 `3307`
## 本次补充
- 新增测试文件 `lsfx-mock-server/tests/test_settings_sync.py`
- 校验 `_load_ruoyi_mysql_defaults()` 读取到的端口与 `application-dev.yml` 当前配置一致
- 校验 `settings.CCDI_DB_HOST/PORT/NAME/USERNAME/PASSWORD` 与主项目开发配置一致
## 验证方式
```bash
cd lsfx-mock-server
python3 -m pytest tests/test_settings_sync.py -q
```
## 验证结果
- 测试通过
- `lsfx-mock-server` 当前默认数据库端口已同步为 `3307`
- 运行时读取结果为:`116.62.17.81 / 3307 / ccdi`
- Mock 无需维护第二份独立数据库端口配置

View File

@@ -0,0 +1,81 @@
# MySQL 3306 到 3307 全量迁移实施记录
## 实施背景
- 迁移时间2026-03-27
- 源库:`116.62.17.81:3306/ccdi`
- 目标库:`116.62.17.81:3307/ccdi`
- 源库版本:`5.7.44`
- 目标库版本:`8.0.18`
- 目标:将当前 `ccdi` 数据库的表结构、索引、触发器、存储过程/函数、事件与业务数据整体迁移到 MySQL 8.0 实例
## 实施内容
1. 读取项目配置,确认源库连接为 `root / Kfcx@1234`,数据库名为 `ccdi`
2. 连通性探测目标实例 `116.62.17.81:3307`,确认可连接且初始不存在 `ccdi` 库。
3. 使用 `mysqldump` 从源库导出整库:
```bash
export MYSQL_PWD='Kfcx@1234'
/usr/local/mysql-9.6.0-macos15-arm64/bin/mysqldump \
-h 116.62.17.81 -P 3306 -u root \
--default-character-set=utf8mb4 \
--single-transaction \
--skip-lock-tables \
--set-gtid-purged=OFF \
--routines --events --triggers \
--hex-blob \
--databases ccdi > /tmp/ccdi_full_20260327_145429.sql
```
4. 在目标实例创建 `ccdi` 数据库并执行导入:
```bash
export MYSQL_PWD='Kfcx@1234'
mysql -h 116.62.17.81 -P 3307 -u root \
-e "CREATE DATABASE IF NOT EXISTS ccdi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -h 116.62.17.81 -P 3307 -u root \
--default-character-set=utf8mb4 \
--init-command="SET NAMES utf8mb4" \
< /tmp/ccdi_full_20260327_145429.sql
```
5. 导入完成后,对源库与目标库执行逐表 `COUNT(*)` 校验,并比对摘要文件哈希。
6. 校验通过后,删除本地临时导出文件 `/tmp/ccdi_full_20260327_145429.sql`
## 核验结果
### 结构核验
- 源库默认字符集/排序规则:`utf8mb4 / utf8mb4_general_ci`
- 目标库默认字符集/排序规则:`utf8mb4 / utf8mb4_unicode_ci`
- 源库基础表数量:`51`
- 目标库基础表数量:`51`
- 源库触发器数量:`0`
- 目标库触发器数量:`0`
- 源库存储过程/函数数量:`0`
- 目标库存储过程/函数数量:`0`
- 源库事件数量:`0`
- 目标库事件数量:`0`
### 数据核验
- 逐表 `COUNT(*)` 摘要文件 SHA1
- 源库:`12873559982afd95e7cdf55f57447b4a58041d89`
- 目标库:`12873559982afd95e7cdf55f57447b4a58041d89`
- 逐表行数比对结果:一致,无差异
- 汇总总行数:`103837`
### 重点大表抽样
- `ccdi_bank_statement``68343`
- `ccdi_bank_statement_tag_result``18931`
- `ccdi_staff_recruitment``6001`
- `ccdi_staff_fmy_relation``2014`
- `ccdi_purchase_transaction``2004`
## 结论
- `116.62.17.81:3307/ccdi` 已完成从 `116.62.17.81:3306/ccdi` 的整库迁移。
- 表结构与数据量校验通过,可作为 MySQL 8.0 的目标库继续使用。

View File

@@ -0,0 +1,25 @@
from pathlib import Path
import re
from config.settings import _load_ruoyi_mysql_defaults, settings
def test_ruoyi_mysql_defaults_should_follow_application_dev_config():
project_root = Path(__file__).resolve().parents[2]
config_path = project_root / "ruoyi-admin" / "src" / "main" / "resources" / "application-dev.yml"
text = config_path.read_text(encoding="utf-8")
match = re.search(r"jdbc:mysql://[^:/?#]+:(?P<port>\d+)/", text)
assert match is not None
assert _load_ruoyi_mysql_defaults()["port"] == match.group("port")
def test_settings_should_use_ruoyi_mysql_defaults():
defaults = _load_ruoyi_mysql_defaults()
assert settings.CCDI_DB_HOST == defaults["host"]
assert settings.CCDI_DB_PORT == int(defaults["port"])
assert settings.CCDI_DB_NAME == defaults["database"]
assert settings.CCDI_DB_USERNAME == defaults["username"]
assert settings.CCDI_DB_PASSWORD == defaults["password"]

View File

@@ -30,7 +30,7 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://116.62.17.81:3306/ccdi?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url: jdbc:mysql://116.62.17.81:3307/ccdi?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: Kfcx@1234
# 从库数据源