feat(dbms): 增加数据库备份任务停止重启功能和MySQL支持
- 添加了备份任务停止和重启接口及实现 - 实现了对MySQL数据库的支持,包括数据库名配置 - 重构了数据库连接和备份操作的SPI架构 - 优化了备份文件删除逻辑,支持目录递归删除 - 增加了连接名称唯一性校验 - 完善了备份任务状态管理和错误处理机制 - 更新了数据库连接参数验证逻辑
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## 模块定位
|
||||
|
||||
`dbms` 是 `system-ops` 下的数据库运维模块,当前面向 Oracle 数据库提供连接配置、连接测试、表列表查询、备份、恢复、任务状态查询和删除接口。
|
||||
`dbms` 是 `system-ops` 下的数据库运维模块,当前支持 Oracle、MySQL 两类数据库运维能力,其中 Oracle 支持 `DATA_PUMP`、`JDBC_EXPORT`,MySQL 当前支持 `JDBC_EXPORT`。
|
||||
|
||||
## 当前接口
|
||||
|
||||
@@ -53,6 +53,7 @@ dbms:
|
||||
backup:
|
||||
storage-path: D:/dbms-backup
|
||||
default-max-file-size-mb: 512
|
||||
mysql-fetch-size: 1000
|
||||
tools:
|
||||
expdp-path:
|
||||
impdp-path:
|
||||
@@ -62,20 +63,31 @@ dbms:
|
||||
|
||||
- `backup.storage-path`
|
||||
- `JDBC_EXPORT` 生成的 CSV 和元数据 JSON 的受管根目录。
|
||||
- `backup.default-max-file-size-mb`
|
||||
- MySQL `JDBC_EXPORT` 默认分片大小,前端可通过 `maxFileSizeMb` 覆盖,默认 512MB。
|
||||
- `backup.mysql-fetch-size`
|
||||
- MySQL `JDBC_EXPORT` 流式读取批量大小,默认 1000。
|
||||
- `tools.expdp-path`、`tools.impdp-path`
|
||||
- Oracle Data Pump 工具路径;为空时尝试走系统 `PATH`。
|
||||
|
||||
## 当前行为
|
||||
|
||||
- 一期仅支持 `ORACLE`。
|
||||
- 连接密码支持两种运行方式:
|
||||
- 前端每次传 `temporaryPassword`。
|
||||
- 连接已保存密文,且公共 `Sm4Utils` 提供 `decryptData_ECB` 时由后端自动解密复用。
|
||||
- 新增连接前的测试接口允许只传 `temporaryPassword`,不强制把密码写进 `connection.password`。
|
||||
- 当前能力矩阵如下:
|
||||
|
||||
| 数据库类型 | 连接测试 | 表列表 | JDBC_EXPORT | DATA_PUMP |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ORACLE | 支持 | 支持 | 支持 | 支持 |
|
||||
| MYSQL | 支持 | 支持 | 支持 | 不支持 |
|
||||
- 备份和恢复只允许基于已保存且连接可用的连接配置发起。
|
||||
- 新增连接前的测试接口仍可传 `temporaryPassword` 做临时连通性测试。
|
||||
- 备份任务异步执行,只有实际文件生成成功后才会写入 `dbms_backup_file` 记录。
|
||||
- `JDBC_EXPORT` 当前会生成两类文件:
|
||||
- 主数据文件:`*.csv`
|
||||
- 元数据文件:`*_metadata_yyyyMMdd_<taskNo>.json`
|
||||
- MySQL `JDBC_EXPORT` 会按任务号创建独立备份目录,每张表独立 CSV,默认按 512MB 分片:
|
||||
- 数据分片文件:`<table>_part001_yyyyMMdd_<taskNo>.csv`
|
||||
- 元数据文件:`mysql_jdbc_export_metadata_yyyyMMdd_<taskNo>.json`
|
||||
- 备份任务支持停止和重新开始:
|
||||
- `POST /database/backups/tasks/stop`
|
||||
- `POST /database/backups/tasks/restart`
|
||||
- `JDBC_EXPORT` 恢复依赖元数据文件,不再允许缺少元数据直接发起恢复。
|
||||
- 删除备份文件时,会校验目标路径必须位于受管备份目录下,避免误删非备份文件。
|
||||
|
||||
@@ -83,7 +95,7 @@ dbms:
|
||||
|
||||
- `DATA_PUMP` 仍依赖部署机器可执行 `expdp`、`impdp`,并且 Oracle 侧已准备好 `directory` 对象和权限。
|
||||
- 当前代码要求 `DATA_PUMP` 连接配置里补齐可管理的 `directoryPath`,否则虽然 Oracle 端可能已导出成功,后端无法安全管理文件记录与删除。
|
||||
- `JDBC_EXPORT` 恢复当前仅覆盖表数据,不承诺恢复索引、约束、触发器、序列、存储过程、权限等 Oracle 对象。
|
||||
- `JDBC_EXPORT` 恢复当前仅覆盖表数据,不承诺恢复索引、约束、触发器、序列、存储过程、权限等数据库对象。
|
||||
- `TIME_RANGE` 模式当前只在 `JDBC_EXPORT` 场景真正参与查询过滤;`DATA_PUMP` 尚未接入 Oracle `QUERY` 参数。
|
||||
- `SIZE_SPLIT` 参数目前已做入参校验,但尚未实现真正的导出分片。
|
||||
- MySQL `JDBC_EXPORT` 已实现按大小分片;Oracle `JDBC_EXPORT` 仍沿用原单文件导出路径。
|
||||
- 本轮仅完成代码路径和文档收口,未执行 `mvn` 编译、测试或真实库联调。
|
||||
|
||||
Reference in New Issue
Block a user