mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 00:10:25 +08:00 
			
		
		
		
	* feat: 优化数据库 BINLOG 同步机制 * feat: 删除数据库实例前需删除关联的数据库备份与恢复任务 * refactor: 重构数据库备份与恢复模块 * feat: 定时清理数据库备份历史和本地 Binlog 文件 * feat: 压缩数据库备份文件
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package entity
 | 
						|
 | 
						|
import (
 | 
						|
	"mayfly-go/pkg/runner"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
var _ DbJob = (*DbBackup)(nil)
 | 
						|
 | 
						|
// DbBackup 数据库备份任务
 | 
						|
type DbBackup struct {
 | 
						|
	DbJobBaseImpl
 | 
						|
 | 
						|
	DbInstanceId uint64        // 数据库实例ID
 | 
						|
	DbName       string        // 数据库名称
 | 
						|
	Name         string        // 数据库备份名称
 | 
						|
	Enabled      bool          // 是否启用
 | 
						|
	EnabledDesc  string        // 启用状态描述
 | 
						|
	StartTime    time.Time     // 开始时间
 | 
						|
	Interval     time.Duration // 间隔时间
 | 
						|
	MaxSaveDays  int           // 数据库备份历史保留天数,过期将自动删除
 | 
						|
	Repeated     bool          // 是否重复执行
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) GetInstanceId() uint64 {
 | 
						|
	return b.DbInstanceId
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) GetDbName() string {
 | 
						|
	return b.DbName
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) GetJobType() DbJobType {
 | 
						|
	return DbJobTypeBackup
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) Schedule() (time.Time, error) {
 | 
						|
	if b.IsFinished() {
 | 
						|
		return time.Time{}, runner.ErrJobFinished
 | 
						|
	}
 | 
						|
	if !b.Enabled {
 | 
						|
		return time.Time{}, runner.ErrJobDisabled
 | 
						|
	}
 | 
						|
	switch b.LastStatus {
 | 
						|
	case DbJobSuccess:
 | 
						|
		lastTime := b.LastTime.Time
 | 
						|
		if lastTime.Before(b.StartTime) {
 | 
						|
			lastTime = b.StartTime.Add(-b.Interval)
 | 
						|
		}
 | 
						|
		return lastTime.Add(b.Interval - lastTime.Sub(b.StartTime)%b.Interval), nil
 | 
						|
	case DbJobRunning, DbJobFailed:
 | 
						|
		return time.Now().Add(time.Minute), nil
 | 
						|
	default:
 | 
						|
		return b.StartTime, nil
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) IsFinished() bool {
 | 
						|
	return !b.Repeated && b.LastStatus == DbJobSuccess
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) IsEnabled() bool {
 | 
						|
	return b.Enabled
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) IsExpired() bool {
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) SetEnabled(enabled bool, desc string) {
 | 
						|
	b.Enabled = enabled
 | 
						|
	b.EnabledDesc = desc
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) Update(job runner.Job) {
 | 
						|
	backup := job.(*DbBackup)
 | 
						|
	b.StartTime = backup.StartTime
 | 
						|
	b.Interval = backup.Interval
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) GetInterval() time.Duration {
 | 
						|
	return b.Interval
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) GetKey() DbJobKey {
 | 
						|
	return b.getKey(b.GetJobType())
 | 
						|
}
 | 
						|
 | 
						|
func (b *DbBackup) SetStatus(status runner.JobStatus, err error) {
 | 
						|
	b.setLastStatus(b.GetJobType(), status, err)
 | 
						|
}
 |