feat: 新增 SAP HANA 数据库备份支持和 FTP 存储后端

后端变更:
- 新增 SAP HANA 备份 Runner (saphana_runner.go),使用 hdbsql CLI 工具执行数据库导出/恢复
- 新增 FTP 存储 Provider (storage/ftp/provider.go),支持 FTP/FTPS 协议上传下载备份文件
- 在 storage/types.go 中添加 FTP 类型常量和 FTPConfig 配置结构
- 在 app.go 中注册 FTP Storage Factory 和 SAP HANA Backup Runner
- 添加 github.com/jlaffaye/ftp 依赖

前端变更:
- BackupTaskType 联合类型新增 'saphana',默认端口 30015
- StorageTargetType 联合类型新增 'ftp'
- 备份任务表单支持 SAP HANA 类型选择及数据库连接配置
- 存储目标表单新增 FTP 配置字段(主机/端口/用户名/密码/基础目录/TLS)

参考:backint_minio1.0.0/ Java 实现
This commit is contained in:
Awuqing
2026-03-21 16:09:14 +08:00
parent 9bfde8c632
commit 0330dd4700
11 changed files with 499 additions and 9 deletions

View File

@@ -106,11 +106,11 @@ export function BackupTaskFormDrawer({ visible, loading, initialValue, storageTa
type: value,
sourcePath: value === 'file' ? current.sourcePath : '',
excludePatterns: value === 'file' ? current.excludePatterns : [],
dbHost: value === 'mysql' || value === 'postgresql' ? current.dbHost : '',
dbPort: value === 'mysql' || value === 'postgresql' ? current.dbPort || getDefaultPort(value) : 0,
dbUser: value === 'mysql' || value === 'postgresql' ? current.dbUser : '',
dbPassword: value === 'mysql' || value === 'postgresql' ? current.dbPassword : '',
dbName: value === 'mysql' || value === 'postgresql' ? current.dbName : '',
dbHost: value === 'mysql' || value === 'postgresql' || value === 'saphana' ? current.dbHost : '',
dbPort: value === 'mysql' || value === 'postgresql' || value === 'saphana' ? current.dbPort || getDefaultPort(value) : 0,
dbUser: value === 'mysql' || value === 'postgresql' || value === 'saphana' ? current.dbUser : '',
dbPassword: value === 'mysql' || value === 'postgresql' || value === 'saphana' ? current.dbPassword : '',
dbName: value === 'mysql' || value === 'postgresql' || value === 'saphana' ? current.dbName : '',
dbPath: value === 'sqlite' ? current.dbPath : '',
}))
if (value !== 'file') {

View File

@@ -5,6 +5,7 @@ export const backupTaskTypeOptions = [
{ label: 'MySQL', value: 'mysql' },
{ label: 'SQLite', value: 'sqlite' },
{ label: 'PostgreSQL', value: 'postgresql' },
{ label: 'SAP HANA', value: 'saphana' },
] as const
export const backupCompressionOptions = [
@@ -22,6 +23,8 @@ export function getBackupTaskTypeLabel(type: BackupTaskType) {
return 'SQLite'
case 'postgresql':
return 'PostgreSQL'
case 'saphana':
return 'SAP HANA'
default:
return type
}
@@ -64,7 +67,7 @@ export function isSQLiteBackupTask(type: BackupTaskType) {
}
export function isDatabaseBackupTask(type: BackupTaskType) {
return type === 'mysql' || type === 'postgresql'
return type === 'mysql' || type === 'postgresql' || type === 'saphana'
}
export function getDefaultPort(type: BackupTaskType) {
@@ -73,6 +76,8 @@ export function getDefaultPort(type: BackupTaskType) {
return 3306
case 'postgresql':
return 5432
case 'saphana':
return 30015
default:
return 0
}