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

5.6 KiB
Raw Permalink Blame History

数据库迁移 - 手动操作指南

问题说明

  • 本地无法直接连接到远程数据库IP 白名单限制)
  • SSH 密码认证失败(需要配置 SSH 密钥)
  • 配置使用 Docker 容器名 oneos-mysql

解决方案

方案 1在服务器上手动执行推荐

步骤 1登录服务器

# 使用密码登录(需要手动输入密码)
ssh root@47.103.115.36
# 密码: Passw0rd2026@ssl

步骤 2上传 SQL 文件

在本地执行:

# 方式 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

# 登录服务器后执行

# 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 密钥(如果没有)

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

步骤 2复制公钥到服务器

ssh-copy-id root@47.103.115.36
# 输入密码: Passw0rd2026@ssl

步骤 3测试免密登录

ssh root@47.103.115.36

步骤 4执行自动化脚本

配置好 SSH 密钥后,可以使用自动化脚本:

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 隧道方式

# 建立 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. 表是否创建成功

SHOW TABLES LIKE 'asset_%';

预期结果:

  • asset_parking
  • asset_vehicle_model
  • asset_vehicle_model_maintain_item

2. 停车场表字段

DESC asset_parking;

检查是否包含:

  • principal公司负责人
  • contact_name联系人
  • contact_phone联系电话
  • parked_amount已停车辆数
  • stock_area库存区域
  • unusual_action_city异动城市
  • longitude经度
  • latitude纬度
  • remark备注

3. 车型参数表字段

DESC asset_vehicle_model;

检查是否包含:

  • brand品牌
  • model车型
  • model_code车型编号
  • model_name车型名称
  • hydrogen_capacity氢瓶容量
  • reserve_electricity储电量
  • 等 18 个字段

4. 车型维保项目关联表字段

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_systemoneos_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 状态: 等待手动执行