Files
oneos-backend/DATABASE_CONNECTION_ANALYSIS.md
k kfluous a2e2d5c27e refactor(asset): 优化保养项目设计,使用折中方案
变更内容:
1. 删除 maintainItemId 字段(冗余,无实际作用)
2. 保留 maintainItem 字段(直接存储项目名称)
3. 新增接口:获取已使用的保养项目列表(去重)
4. 前端可使用该接口提供下拉提示,提升用户体验
5. 添加 maintainItem 字段的非空校验

设计思路:
- 不引入保养项目字典表(避免过度设计)
- 通过 DISTINCT 查询提供已使用项目列表
- 用户可以输入新项目,也可以从已有项目中选择
- 后续如需规范化,可平滑升级到字典表方案
2026-03-12 09:54:00 +08:00

6.8 KiB
Raw Permalink Blame History

数据库连接问题分析报告

🔍 问题分析

核心问题

数据库名称不匹配!

详细对比

1. 老项目(已废弃)

  • 项目路径: ~/.openclaw/workspace/yudao-asset-cloud/
  • 数据库名称: yudao_asset(单独的资产管理数据库)
  • 连接方式: 可能是直接 IP 连接或本地开发环境
  • SQL 脚本: 针对 yudao_asset 数据库设计

2. 新项目(当前)

  • 项目路径: /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend/
  • 数据库架构: 微服务架构,多个数据库
    • oneos_system - 系统模块
    • oneos_infra - 基础设施模块
    • oneos_bpm - 工作流模块
    • 没有 yudao_assetoneos_asset
  • 连接方式: Docker 容器oneos-mysql
  • 部署环境: Docker Compose 部署在 47.103.115.36

为什么之前可以连接?

答案:之前的项目和现在的项目不是同一个!

  1. 老项目yudao-asset-cloud

    • 独立的资产管理系统
    • 使用独立的 yudao_asset 数据库
    • 可能在本地开发环境或测试服务器
    • 已被废弃并删除
  2. 新项目ln-oneos

    • 完整的 ONE-OS 系统
    • 微服务架构,多个数据库
    • Docker 部署在生产服务器
    • 资产模块需要集成到现有数据库中

🎯 解决方案

方案 1使用 oneos_system 数据库(推荐)

理由:

  • 系统模块是核心模块
  • 资产管理属于系统基础数据
  • 配置已存在,无需额外配置

操作:

# 1. 登录服务器
ssh root@47.103.115.36

# 2. 执行 SQL使用 oneos_system 数据库)
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql

# 3. 验证
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"

方案 2创建独立的 oneos_asset 数据库

理由:

  • 资产管理模块独立
  • 便于数据隔离和管理
  • 符合微服务架构

操作:

# 1. 登录服务器
ssh root@47.103.115.36

# 2. 创建数据库
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "CREATE DATABASE IF NOT EXISTS oneos_asset DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 3. 执行 SQL
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-2026-03-12-停车场和车型参数模块.sql

# 4. 验证
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "SHOW TABLES LIKE 'asset_%';"

额外配置: 需要创建 asset-server-dev.yaml 配置文件:

server:
  port: 48084

spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://oneos-mysql:3306/oneos_asset?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
          username: root
          password: Passw0rd2026
        slave:
          lazy: true
          url: jdbc:mysql://oneos-mysql:3306/oneos_asset?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
          username: root
          password: Passw0rd2026

  data:
    redis:
      database: 4

  cloud:
    nacos:
      discovery:
        namespace: dev
      config:
        namespace: dev

yudao:
  info:
    base-package: cn.iocoder.yudao.module.asset

📊 两种方案对比

对比项 方案 1使用 oneos_system 方案 2创建 oneos_asset
实施难度 简单 中等
配置工作 无需额外配置 需要创建配置文件
数据隔离 与系统数据混合 完全隔离
微服务架构 不符合 符合
维护成本
推荐指数

🔧 推荐方案

短期方案(快速验证)

使用方案 1oneos_system 数据库

  • 优点:快速验证功能,无需额外配置
  • 缺点:不符合微服务架构

长期方案(生产部署)

使用方案 2oneos_asset 数据库

  • 优点:符合微服务架构,数据隔离
  • 缺点:需要额外配置

📝 更新后的操作步骤

步骤 1选择方案并执行数据库迁移

方案 1推荐用于快速测试:

ssh root@47.103.115.36
# 上传 SQL 文件后
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql

方案 2推荐用于生产环境:

ssh root@47.103.115.36
# 创建数据库
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "CREATE DATABASE IF NOT EXISTS oneos_asset DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 执行 SQL
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-2026-03-12-停车场和车型参数模块.sql

步骤 2配置应用仅方案 2 需要)

创建 Nacos 配置:

cd /Users/kkfluous/Projects/ai-coding/ln-oneos/nacos-config

# 创建 asset-server-dev.yaml
cat > asset-server-dev.yaml << 'EOF'
# 配置内容见上文
EOF

# 上传到 Nacos如果使用 Nacos
# 或者在服务器上手动配置

步骤 3启动服务

cd /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend

# 如果使用方案 1直接启动
mvn spring-boot:run

# 如果使用方案 2需要先上传配置到 Nacos

💡 经验教训

1. 项目迁移要注意数据库架构变化

  • 老项目:单体架构,单一数据库
  • 新项目:微服务架构,多个数据库
  • 不能直接复用老项目的 SQL 脚本!

2. 开发前要确认目标环境

  • 数据库名称
  • 数据库架构
  • 部署方式Docker/本地)
  • 网络环境

3. 文档要及时更新

  • SQL 脚本中的数据库名称
  • 配置文件中的数据库连接
  • 部署文档中的环境说明

🎯 下一步操作

立即执行(推荐方案 1

# 1. 登录服务器
ssh root@47.103.115.36

# 2. 创建 SQL 文件
cat > /tmp/update-asset.sql << 'EOF'
# 复制 sql/update-2026-03-12-停车场和车型参数模块.sql 的内容
EOF

# 3. 执行 SQL
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-asset.sql

# 4. 验证
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_parking;"
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model;"

后续优化(方案 2

  1. 创建独立的 oneos_asset 数据库
  2. 配置 asset-server-dev.yaml
  3. 上传配置到 Nacos
  4. 重新部署服务

创建时间: 2026-03-12 01:40
状态: 问题已分析,等待选择方案执行