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

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

223 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库迁移 - 手动操作指南
## 问题说明
- 本地无法直接连接到远程数据库IP 白名单限制)
- SSH 密码认证失败(需要配置 SSH 密钥)
- 配置使用 Docker 容器名 `oneos-mysql`
## 解决方案
### 方案 1在服务器上手动执行推荐
#### 步骤 1登录服务器
```bash
# 使用密码登录(需要手动输入密码)
ssh root@47.103.115.36
# 密码: Passw0rd2026@ssl
```
#### 步骤 2上传 SQL 文件
在本地执行:
```bash
# 方式 1使用 scp需要手动输入密码
scp sql/update-2026-03-12-停车场和车型参数模块.sql root@47.103.115.36:/tmp/
# 方式 2复制文件内容在服务器上创建
# 复制 sql/update-2026-03-12-停车场和车型参数模块.sql 的内容
# 在服务器上执行:
cat > /tmp/update-asset.sql << 'EOF'
# 粘贴 SQL 内容
EOF
```
#### 步骤 3在服务器上执行 SQL
```bash
# 登录服务器后执行
# 1. 检查 MySQL 容器
docker ps | grep mysql
# 2. 查看数据库列表
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "SHOW DATABASES;"
# 3. 确认使用哪个数据库(可能是 oneos_system 或其他)
# 根据配置,系统使用多个数据库:
# - oneos_system (系统模块)
# - oneos_infra (基础设施)
# - oneos_bpm (工作流)
# 4. 执行 SQL 脚本(假设使用 oneos_system
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql
# 5. 验证表结构
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"
# 6. 查看停车场表结构
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_parking;"
# 7. 查看车型参数表结构
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model;"
# 8. 查看车型维保项目关联表
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model_maintain_item;"
```
### 方案 2配置 SSH 密钥(一次性配置)
#### 步骤 1生成 SSH 密钥(如果没有)
```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
#### 步骤 2复制公钥到服务器
```bash
ssh-copy-id root@47.103.115.36
# 输入密码: Passw0rd2026@ssl
```
#### 步骤 3测试免密登录
```bash
ssh root@47.103.115.36
```
#### 步骤 4执行自动化脚本
配置好 SSH 密钥后,可以使用自动化脚本:
```bash
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend
# 上传 SQL
scp sql/update-2026-03-12-停车场和车型参数模块.sql root@47.103.115.36:/tmp/
# 执行 SQL
ssh root@47.103.115.36 "docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql"
# 验证
ssh root@47.103.115.36 "docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e 'SHOW TABLES LIKE \"asset_%\";'"
```
### 方案 3使用数据库管理工具
#### 工具选择
- Navicat
- DBeaver
- MySQL Workbench
- DataGrip
#### 连接信息
由于使用 Docker 容器,需要:
1. SSH 隧道连接到服务器
2. 通过 Docker 端口映射访问 MySQL
#### SSH 隧道方式
```bash
# 建立 SSH 隧道
ssh -L 3307:localhost:3306 root@47.103.115.36
# 然后在数据库工具中连接
# Host: localhost
# Port: 3307
# User: root
# Password: Passw0rd2026
# Database: oneos_system
```
## SQL 文件内容
文件位置:`sql/update-2026-03-12-停车场和车型参数模块.sql`
包含内容:
1. 停车场表结构完善9 个新字段)
2. 车型参数表创建18 个字段)
3. 车型维保项目关联表创建9 个字段)
## 验证清单
执行 SQL 后,验证以下内容:
### 1. 表是否创建成功
```sql
SHOW TABLES LIKE 'asset_%';
```
预期结果:
- asset_parking
- asset_vehicle_model
- asset_vehicle_model_maintain_item
### 2. 停车场表字段
```sql
DESC asset_parking;
```
检查是否包含:
- principal公司负责人
- contact_name联系人
- contact_phone联系电话
- parked_amount已停车辆数
- stock_area库存区域
- unusual_action_city异动城市
- longitude经度
- latitude纬度
- remark备注
### 3. 车型参数表字段
```sql
DESC asset_vehicle_model;
```
检查是否包含:
- brand品牌
- model车型
- model_code车型编号
- model_name车型名称
- hydrogen_capacity氢瓶容量
- reserve_electricity储电量
- 等 18 个字段
### 4. 车型维保项目关联表字段
```sql
DESC asset_vehicle_model_maintain_item;
```
检查是否包含:
- vehicle_model_id车型ID
- maintain_item保养项目
- maintain_content保养内容
- materials_expenses材料费
- hour_fee工时费
- kilometer_cycle公里周期
- time_cycle时间周期
## 常见问题
### Q1: 找不到数据库
**问题**: `ERROR 1049 (42000): Unknown database 'yudao_asset'`
**解决**:
- 检查实际使用的数据库名称
- 可能是 `oneos_system``oneos_infra` 或其他
- 查看 Nacos 配置确认数据库名
### Q2: 表已存在
**问题**: `ERROR 1050 (42S01): Table 'asset_parking' already exists`
**解决**:
- 如果是 ALTER TABLE 失败,检查字段是否已存在
- 如果是 CREATE TABLE 失败,表示表已创建,跳过即可
### Q3: 权限不足
**问题**: `ERROR 1142 (42000): CREATE command denied`
**解决**:
- 确认使用 root 用户
- 检查密码是否正确
- 确认用户有 CREATE、ALTER 权限
## 下一步
数据库迁移完成后:
1. 启动应用服务
2. 执行 API 测试
3. 验证功能正常
---
**创建时间**: 2026-03-12 01:35
**状态**: 等待手动执行