mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-02 23:40:24 +08:00
* fix: 保存 LastResult 时截断字符串过长部分,以避免数据库报错 * refactor: 新增 entity.DbTaskBase 和 persistence.dbTaskBase, 用于实现数据库备份和恢复任务处理相关部分 * fix: aeskey变更后,解密密码出现数组越界访问错误 * fix: 时间属性为零值时,保存到 mysql 数据库报错 * refactor db.infrastructure.service.scheduler * feat: 实现立即备份功能 * refactor db.infrastructure.service.db_instance * refactor: 从数据库中获取数据库备份目录、mysql文件路径等配置信息 * fix: 数据库备份和恢复问题 * fix: 修改 .gitignore 文件,忽略数据库备份目录和数据库程序目录
33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
package dbm
|
|
|
|
import (
|
|
"context"
|
|
"mayfly-go/internal/db/domain/entity"
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
type DbProgram interface {
|
|
Backup(ctx context.Context, backupHistory *entity.DbBackupHistory) (*entity.BinlogInfo, error)
|
|
FetchBinlogs(ctx context.Context, downloadLatestBinlogFile bool, earliestBackupSequence, latestBinlogSequence int64) ([]*entity.BinlogFile, error)
|
|
ReplayBinlog(ctx context.Context, originalDatabase, targetDatabase string, restoreInfo *RestoreInfo) error
|
|
RestoreBackupHistory(ctx context.Context, dbName string, dbBackupId uint64, dbBackupHistoryUuid string) error
|
|
GetBinlogEventPositionAtOrAfterTime(ctx context.Context, binlogName string, targetTime time.Time) (position int64, parseErr error)
|
|
}
|
|
|
|
type RestoreInfo struct {
|
|
BackupHistory *entity.DbBackupHistory
|
|
BinlogHistories []*entity.DbBinlogHistory
|
|
StartPosition int64
|
|
TargetPosition int64
|
|
TargetTime time.Time
|
|
}
|
|
|
|
func (ri *RestoreInfo) GetBinlogPaths(binlogDir string) []string {
|
|
files := make([]string, 0, len(ri.BinlogHistories))
|
|
for _, history := range ri.BinlogHistories {
|
|
files = append(files, filepath.Join(binlogDir, history.FileName))
|
|
}
|
|
return files
|
|
}
|