mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-12-17 21:08:25 +08:00
fix: Fix the issue of database backup failure (#11060)
This commit is contained in:
parent
6d4c1f8e79
commit
d6b00967ca
3 changed files with 22 additions and 18 deletions
|
|
@ -8,17 +8,14 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/constant"
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/i18n"
|
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/buserr"
|
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/model"
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/task"
|
"github.com/1Panel-dev/1Panel/agent/app/task"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/buserr"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/constant"
|
||||||
"github.com/1Panel-dev/1Panel/agent/global"
|
"github.com/1Panel-dev/1Panel/agent/global"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/i18n"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/common"
|
"github.com/1Panel-dev/1Panel/agent/utils/common"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/files"
|
"github.com/1Panel-dev/1Panel/agent/utils/files"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/mysql/client"
|
"github.com/1Panel-dev/1Panel/agent/utils/mysql/client"
|
||||||
|
|
@ -94,7 +91,7 @@ func handleMysqlBackup(db DatabaseHelper, parentTask *task.Task, recordID uint,
|
||||||
if parentTask != nil {
|
if parentTask != nil {
|
||||||
return itemHandler()
|
return itemHandler()
|
||||||
}
|
}
|
||||||
backupTask.AddSubTaskWithOps(task.GetTaskName(itemName, task.TaskBackup, task.TaskScopeBackup), func(t *task.Task) error { return itemHandler() }, nil, 3, time.Hour)
|
backupTask.AddSubTaskWithOps(task.GetTaskName(itemName, task.TaskBackup, task.TaskScopeBackup), func(t *task.Task) error { return itemHandler() }, nil, 0, 3*time.Hour)
|
||||||
go func() {
|
go func() {
|
||||||
if err := backupTask.Execute(); err != nil {
|
if err := backupTask.Execute(); err != nil {
|
||||||
backupRepo.UpdateRecordByMap(recordID, map[string]interface{}{"status": constant.StatusFailed, "message": err.Error()})
|
backupRepo.UpdateRecordByMap(recordID, map[string]interface{}{"status": constant.StatusFailed, "message": err.Error()})
|
||||||
|
|
@ -196,7 +193,7 @@ func handleMysqlRecover(req dto.CommonRecover, parentTask *task.Task, isRollback
|
||||||
return recoverDatabase(parentTask)
|
return recoverDatabase(parentTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
itemTask.AddSubTaskWithOps(i18n.GetMsgByKey("TaskRecover"), recoverDatabase, nil, 3, time.Hour)
|
itemTask.AddSubTaskWithOps(i18n.GetMsgByKey("TaskRecover"), recoverDatabase, nil, 0, 3*time.Hour)
|
||||||
go func() {
|
go func() {
|
||||||
_ = itemTask.Execute()
|
_ = itemTask.Execute()
|
||||||
}()
|
}()
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ func handlePostgresqlBackup(db DatabaseHelper, parentTask *task.Task, recordID u
|
||||||
if parentTask != nil {
|
if parentTask != nil {
|
||||||
return itemHandler()
|
return itemHandler()
|
||||||
}
|
}
|
||||||
backupTask.AddSubTaskWithOps(task.GetTaskName(itemName, task.TaskBackup, task.TaskScopeBackup), func(t *task.Task) error { return itemHandler() }, nil, 3, time.Hour)
|
backupTask.AddSubTaskWithOps(task.GetTaskName(itemName, task.TaskBackup, task.TaskScopeBackup), func(t *task.Task) error { return itemHandler() }, nil, 0, 3*time.Hour)
|
||||||
go func() {
|
go func() {
|
||||||
if err := backupTask.Execute(); err != nil {
|
if err := backupTask.Execute(); err != nil {
|
||||||
backupRepo.UpdateRecordByMap(recordID, map[string]interface{}{"status": constant.StatusFailed, "message": err.Error()})
|
backupRepo.UpdateRecordByMap(recordID, map[string]interface{}{"status": constant.StatusFailed, "message": err.Error()})
|
||||||
|
|
@ -130,10 +130,12 @@ func handlePostgresqlRecover(req dto.CommonRecover, parentTask *task.Task, isRol
|
||||||
if !isRollback {
|
if !isRollback {
|
||||||
rollbackFile := path.Join(global.Dir.TmpDir, fmt.Sprintf("database/%s/%s_%s.sql.gz", req.Type, req.DetailName, time.Now().Format(constant.DateTimeSlimLayout)))
|
rollbackFile := path.Join(global.Dir.TmpDir, fmt.Sprintf("database/%s/%s_%s.sql.gz", req.Type, req.DetailName, time.Now().Format(constant.DateTimeSlimLayout)))
|
||||||
if err := cli.Backup(client.BackupInfo{
|
if err := cli.Backup(client.BackupInfo{
|
||||||
|
Database: req.Name,
|
||||||
Name: req.DetailName,
|
Name: req.DetailName,
|
||||||
TargetDir: path.Dir(rollbackFile),
|
TargetDir: path.Dir(rollbackFile),
|
||||||
FileName: path.Base(rollbackFile),
|
FileName: path.Base(rollbackFile),
|
||||||
|
|
||||||
|
Task: t,
|
||||||
Timeout: 300,
|
Timeout: 300,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return fmt.Errorf("backup postgresql db %s for rollback before recover failed, err: %v", req.DetailName, err)
|
return fmt.Errorf("backup postgresql db %s for rollback before recover failed, err: %v", req.DetailName, err)
|
||||||
|
|
@ -142,9 +144,11 @@ func handlePostgresqlRecover(req dto.CommonRecover, parentTask *task.Task, isRol
|
||||||
if !isOk {
|
if !isOk {
|
||||||
global.LOG.Info("recover failed, start to rollback now")
|
global.LOG.Info("recover failed, start to rollback now")
|
||||||
if err := cli.Recover(client.RecoverInfo{
|
if err := cli.Recover(client.RecoverInfo{
|
||||||
|
Database: req.Name,
|
||||||
Name: req.DetailName,
|
Name: req.DetailName,
|
||||||
SourceFile: rollbackFile,
|
SourceFile: rollbackFile,
|
||||||
|
|
||||||
|
Task: t,
|
||||||
Timeout: 300,
|
Timeout: 300,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
global.LOG.Errorf("rollback postgresql db %s from %s failed, err: %v", req.DetailName, rollbackFile, err)
|
global.LOG.Errorf("rollback postgresql db %s from %s failed, err: %v", req.DetailName, rollbackFile, err)
|
||||||
|
|
@ -167,9 +171,11 @@ func handlePostgresqlRecover(req dto.CommonRecover, parentTask *task.Task, isRol
|
||||||
t.LogWithStatus(i18n.GetMsgByKey("Decrypt"), err)
|
t.LogWithStatus(i18n.GetMsgByKey("Decrypt"), err)
|
||||||
}
|
}
|
||||||
if err := cli.Recover(client.RecoverInfo{
|
if err := cli.Recover(client.RecoverInfo{
|
||||||
|
Database: req.Name,
|
||||||
Name: req.DetailName,
|
Name: req.DetailName,
|
||||||
SourceFile: req.File,
|
SourceFile: req.File,
|
||||||
Username: dbInfo.Username,
|
Username: dbInfo.Username,
|
||||||
|
Task: t,
|
||||||
Timeout: 300,
|
Timeout: 300,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
global.LOG.Errorf("recover postgresql db %s from %s failed, err: %v", req.DetailName, req.File, err)
|
global.LOG.Errorf("recover postgresql db %s from %s failed, err: %v", req.DetailName, req.File, err)
|
||||||
|
|
@ -182,7 +188,7 @@ func handlePostgresqlRecover(req dto.CommonRecover, parentTask *task.Task, isRol
|
||||||
return recoverDatabase(parentTask)
|
return recoverDatabase(parentTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
itemTask.AddSubTaskWithOps(i18n.GetMsgByKey("TaskRecover"), recoverDatabase, nil, 3, time.Hour)
|
itemTask.AddSubTaskWithOps(i18n.GetMsgByKey("TaskRecover"), recoverDatabase, nil, 0, 3*time.Hour)
|
||||||
go func() {
|
go func() {
|
||||||
_ = itemTask.Execute()
|
_ = itemTask.Execute()
|
||||||
}()
|
}()
|
||||||
|
|
|
||||||
|
|
@ -1027,18 +1027,16 @@ const verifyScript = (rule: any, value: any, callback: any) => {
|
||||||
}
|
}
|
||||||
callback();
|
callback();
|
||||||
};
|
};
|
||||||
const verifyUrlItems = (rule: any, value: any, callback: any) => {
|
const verifyUrlItems = () => {
|
||||||
if (!form.urlItems || form.urlItems.length === 0) {
|
if (!form.urlItems || form.urlItems.length === 0) {
|
||||||
callback(new Error(i18n.global.t('commons.rule.requiredInput')));
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
for (const item of form.urlItems) {
|
for (const item of form.urlItems) {
|
||||||
if (!item) {
|
if (!item) {
|
||||||
callback(new Error(i18n.global.t('cronjob.urlHelper')));
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback();
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const verifySpec = (rule: any, value: any, callback: any) => {
|
const verifySpec = (rule: any, value: any, callback: any) => {
|
||||||
|
|
@ -1179,7 +1177,6 @@ const rules = reactive({
|
||||||
websiteList: [Rules.requiredSelect],
|
websiteList: [Rules.requiredSelect],
|
||||||
appIdList: [Rules.requiredSelect],
|
appIdList: [Rules.requiredSelect],
|
||||||
dbNameList: [Rules.requiredSelect],
|
dbNameList: [Rules.requiredSelect],
|
||||||
urlItems: [{ validator: verifyUrlItems, trigger: 'blur', required: true }],
|
|
||||||
files: [{ validator: verifyFiles, trigger: 'blur', required: true }],
|
files: [{ validator: verifyFiles, trigger: 'blur', required: true }],
|
||||||
sourceDir: [Rules.requiredInput],
|
sourceDir: [Rules.requiredInput],
|
||||||
sourceAccountItems: [Rules.requiredSelect],
|
sourceAccountItems: [Rules.requiredSelect],
|
||||||
|
|
@ -1458,6 +1455,10 @@ function hasScript() {
|
||||||
|
|
||||||
const onSubmit = async (formEl: FormInstance | undefined) => {
|
const onSubmit = async (formEl: FormInstance | undefined) => {
|
||||||
let specs = [];
|
let specs = [];
|
||||||
|
if (form.type === 'curl' && (form.urlItems.length === 0 || !verifyUrlItems())) {
|
||||||
|
MsgError(i18n.global.t('cronjob.urlHelper'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!form.specCustom) {
|
if (!form.specCustom) {
|
||||||
for (const item of form.specObjs) {
|
for (const item of form.specObjs) {
|
||||||
const itemSpec = transObjToSpec(item.specType, item.week, item.day, item.hour, item.minute, item.second);
|
const itemSpec = transObjToSpec(item.specType, item.week, item.day, item.hour, item.minute, item.second);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue