# 数据库迁移模块 ## 功能说明 emoon-migration 模块提供数据库表结构和数据的迁移功能,支持将源数据库的指定表迁移到目标数据库。 ## API 接口 ### 1. 执行数据库迁移 **接口地址:** `POST /migration/migrate` **请求参数:** ```json { "src": { "url": "jdbc:mysql://localhost:3306/source_db", "username": "src_user", "password": "src_password" }, "tgt": { "url": "jdbc:mysql://localhost:3306/target_db", "username": "tgt_user", "password": "tgt_password" }, "tables": ["user", "order", "product"], "batchSize": 1000 } ``` **参数说明:** - `src`: 源数据库配置 - `tgt`: 目标数据库配置 - `tables`: 需要迁移的表名列表,为空表示迁移全部表 - `batchSize`: 批量处理大小,默认1000 **响应示例:** ```json { "code": 200, "msg": "数据库迁移成功", "data": { "success": true, "message": "成功迁移 3 个表,共 12500 条记录", "migratedTables": ["user", "order", "product"], "totalRecords": 12500, "duration": 3560, "tableInfos": [ { "tableName": "user", "recordCount": 5000, "success": true, "duration": 1200 }, { "tableName": "order", "recordCount": 7500, "success": true, "duration": 1800 }, { "tableName": "product", "recordCount": 0, "success": true, "duration": 560 } ] } } ``` ### 2. 验证数据库连接 **接口地址:** `POST /migration/validate-connection` **请求参数:** ```json { "url": "jdbc:mysql://localhost:3306/database", "username": "user", "password": "password" } ``` ### 3. 获取服务状态 **接口地址:** `GET /migration/status` ## 使用示例 ### cURL 示例 ```bash # 执行数据库迁移 curl -X POST http://localhost:8080/migration/migrate \ -H "Content-Type: application/json" \ -d '{ "src": { "url": "jdbc:mysql://localhost:3306/source_db", "username": "root", "password": "password" }, "tgt": { "url": "jdbc:mysql://localhost:3306/target_db", "username": "root", "password": "password" }, "tables": ["user", "role"], "batchSize": 500 }' # 验证数据库连接 curl -X POST http://localhost:8080/migration/validate-connection \ -H "Content-Type: application/json" \ -d '{ "url": "jdbc:mysql://localhost:3306/test_db", "username": "root", "password": "password" }' ``` ### Java 代码示例 ```java @RestController public class TestController { @Autowired private DatabaseMigrationService migrationService; public void testMigration() { MigrationRequest request = new MigrationRequest(); // 配置源数据库 DatabaseConfig src = new DatabaseConfig() .setUrl("jdbc:mysql://localhost:3306/source_db") .setUsername("root") .setPassword("password"); // 配置目标数据库 DatabaseConfig tgt = new DatabaseConfig() .setUrl("jdbc:mysql://localhost:3306/target_db") .setUsername("root") .setPassword("password"); request.setSrc(src); request.setTgt(tgt); request.setTables(Arrays.asList("user", "role")); request.setBatchSize(1000); // 执行迁移 MigrationResult result = migrationService.migrateTables(request); if (result.getSuccess()) { System.out.println("迁移成功: " + result.getMessage()); } else { System.out.println("迁移失败: " + result.getMessage()); } } } ``` ## 注意事项 1. **数据库驱动支持**:模块默认包含 MySQL 和 PostgreSQL 驱动,如需支持其他数据库,请添加相应的驱动依赖。 2. **数据安全**: - 建议在生产环境中使用数据库连接池 - 敏感信息(密码)建议使用加密传输 - 迁移前请备份目标数据库 3. **性能优化**: - 可以通过调整 `batchSize` 参数优化迁移性能 - 大数据量迁移建议分批进行 - 迁移过程中避免对源数据库进行写操作 4. **表结构兼容性**: - 目前支持基本数据类型的自动迁移 - 复杂的存储过程、触发器等对象需要手动迁移 - 不同数据库间的数据类型差异需要特别注意 5. **事务处理**: - 每个表的迁移是独立的事务 - 单个表迁移失败不会影响其他表的迁移 - 建议在迁移前进行数据验证