# 数据库迁移 - 手动操作指南 ## 问题说明 - 本地无法直接连接到远程数据库(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 **状态**: 等待手动执行