mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-27 17:26:03 +08:00
feat: 升级回滚增加相关数据库文件 (#4638)
This commit is contained in:
parent
884a169a6f
commit
7fd672c1c9
2 changed files with 48 additions and 6 deletions
|
|
@ -173,8 +173,8 @@ func (u *UpgradeService) handleBackup(fileOp files.FileOp, originalDir string) e
|
||||||
if err := fileOp.Copy("/etc/systemd/system/1panel.service", originalDir); err != nil {
|
if err := fileOp.Copy("/etc/systemd/system/1panel.service", originalDir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dbPath := global.CONF.System.DbPath + "/" + global.CONF.System.DbFile
|
checkPointOfWal()
|
||||||
if err := fileOp.Copy(dbPath, originalDir); err != nil {
|
if err := handleTar(path.Join(global.CONF.System.BaseDir, "1panel/db"), originalDir, "db.tar.gz", "./1Panel.db-*"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -182,8 +182,17 @@ func (u *UpgradeService) handleBackup(fileOp files.FileOp, originalDir string) e
|
||||||
|
|
||||||
func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
|
func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
|
||||||
_ = settingRepo.Update("SystemStatus", "Free")
|
_ = settingRepo.Update("SystemStatus", "Free")
|
||||||
if err := common.CopyFile(path.Join(originalDir, "1Panel.db"), global.CONF.System.DbPath); err != nil {
|
|
||||||
global.LOG.Errorf("rollback 1panel failed, err: %v", err)
|
checkPointOfWal()
|
||||||
|
if _, err := os.Stat(path.Join(originalDir, "1Panel.db")); err == nil {
|
||||||
|
if err := common.CopyFile(path.Join(originalDir, "1Panel.db"), global.CONF.System.DbPath); err != nil {
|
||||||
|
global.LOG.Errorf("rollback 1panel db failed, err: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, err := os.Stat(path.Join(originalDir, "db.tar.gz")); err == nil {
|
||||||
|
if err := handleUnTar(path.Join(originalDir, "db.tar.gz"), global.CONF.System.DbPath); err != nil {
|
||||||
|
global.LOG.Errorf("rollback 1panel db failed, err: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err := common.CopyFile(path.Join(originalDir, "1panel"), "/usr/local/bin"); err != nil {
|
if err := common.CopyFile(path.Join(originalDir, "1panel"), "/usr/local/bin"); err != nil {
|
||||||
global.LOG.Errorf("rollback 1pctl failed, err: %v", err)
|
global.LOG.Errorf("rollback 1pctl failed, err: %v", err)
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,11 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
cmdUtils "github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
cmdUtils "github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
@ -55,8 +57,16 @@ var restoreCmd = &cobra.Command{
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println("(3/4) 1panel 服务回滚成功")
|
fmt.Println("(3/4) 1panel 服务回滚成功")
|
||||||
if err := common.CopyFile(path.Join(tmpPath, "1Panel.db"), path.Join(baseDir, "1panel", "db")); err != nil {
|
checkPointOfWal()
|
||||||
return err
|
if _, err := os.Stat(path.Join(tmpPath, "1Panel.db")); err == nil {
|
||||||
|
if err := common.CopyFile(path.Join(tmpPath, "1Panel.db"), path.Join(baseDir, "1panel/db")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, err := os.Stat(path.Join(tmpPath, "db.tar.gz")); err == nil {
|
||||||
|
if err := handleUnTar(path.Join(tmpPath, "db.tar.gz"), path.Join(baseDir, "1panel")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf("(4/4) 1panel 数据回滚成功 \n\n")
|
fmt.Printf("(4/4) 1panel 数据回滚成功 \n\n")
|
||||||
|
|
||||||
|
|
@ -65,6 +75,14 @@ var restoreCmd = &cobra.Command{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkPointOfWal() {
|
||||||
|
db, err := loadDBConn()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = db.Exec("PRAGMA wal_checkpoint(TRUNCATE);").Error
|
||||||
|
}
|
||||||
|
|
||||||
func loadRestorePath(upgradeDir string) (string, error) {
|
func loadRestorePath(upgradeDir string) (string, error) {
|
||||||
if _, err := os.Stat(upgradeDir); err != nil && os.IsNotExist(err) {
|
if _, err := os.Stat(upgradeDir); err != nil && os.IsNotExist(err) {
|
||||||
return "暂无可回滚文件", nil
|
return "暂无可回滚文件", nil
|
||||||
|
|
@ -87,3 +105,18 @@ func loadRestorePath(upgradeDir string) (string, error) {
|
||||||
})
|
})
|
||||||
return folders[0], nil
|
return folders[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleUnTar(sourceFile, targetDir string) error {
|
||||||
|
if _, err := os.Stat(targetDir); err != nil && os.IsNotExist(err) {
|
||||||
|
if err = os.MkdirAll(targetDir, os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commands := fmt.Sprintf("tar zxvfC %s %s", sourceFile, targetDir)
|
||||||
|
stdout, err := cmdUtils.ExecWithTimeOut(commands, 20*time.Second)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(stdout)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue