# 数据库连接问题分析报告

## 🔍 问题分析

### 核心问题
**数据库名称不匹配！**

### 详细对比

#### 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_asset` 或 `oneos_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 数据库（推荐）

**理由**:
- 系统模块是核心模块
- 资产管理属于系统基础数据
- 配置已存在，无需额外配置

**操作**:
```bash
# 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 数据库

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

**操作**:
```bash
# 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` 配置文件：
```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 |
|--------|---------------------------|--------------------------|
| 实施难度 | ⭐ 简单 | ⭐⭐ 中等 |
| 配置工作 | 无需额外配置 | 需要创建配置文件 |
| 数据隔离 | 与系统数据混合 | 完全隔离 |
| 微服务架构 | 不符合 | 符合 |
| 维护成本 | 低 | 中 |
| 推荐指数 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |

## 🔧 推荐方案

### 短期方案（快速验证）
**使用方案 1：oneos_system 数据库**
- 优点：快速验证功能，无需额外配置
- 缺点：不符合微服务架构

### 长期方案（生产部署）
**使用方案 2：oneos_asset 数据库**
- 优点：符合微服务架构，数据隔离
- 缺点：需要额外配置

## 📝 更新后的操作步骤

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

**方案 1（推荐用于快速测试）**:
```bash
ssh root@47.103.115.36
# 上传 SQL 文件后
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql
```

**方案 2（推荐用于生产环境）**:
```bash
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 配置：
```bash
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/nacos-config

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

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

### 步骤 3：启动服务

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

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

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

## 💡 经验教训

### 1. 项目迁移要注意数据库架构变化
- 老项目：单体架构，单一数据库
- 新项目：微服务架构，多个数据库
- **不能直接复用老项目的 SQL 脚本！**

### 2. 开发前要确认目标环境
- 数据库名称
- 数据库架构
- 部署方式（Docker/本地）
- 网络环境

### 3. 文档要及时更新
- SQL 脚本中的数据库名称
- 配置文件中的数据库连接
- 部署文档中的环境说明

## 🎯 下一步操作

### 立即执行（推荐方案 1）
```bash
# 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  
**状态**: 问题已分析，等待选择方案执行
