mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-08 01:20:07 +08:00
fix: 解决 PostgreSQL 数据恢复失败的问题 (#3546)
This commit is contained in:
parent
4f482ad891
commit
c23c3db150
@ -201,35 +201,21 @@ func handleAppRecover(install *model.AppInstall, recoverFile string, isRollback
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if database.Type == constant.AppPostgresql {
|
switch database.Type {
|
||||||
|
case constant.AppPostgresql:
|
||||||
db, err := postgresqlRepo.Get(commonRepo.WithByID(resource.ResourceId))
|
db, err := postgresqlRepo.Get(commonRepo.WithByID(resource.ResourceId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
newDB, envMap, err := reCreatePostgresqlDB(db.ID, database, oldInstall.Env)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
oldHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", envMap["PANEL_DB_HOST"].(string))
|
|
||||||
newHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", database.Address)
|
|
||||||
oldInstall.Env = strings.ReplaceAll(oldInstall.Env, oldHost, newHost)
|
|
||||||
envMap["PANEL_DB_HOST"] = database.Address
|
|
||||||
newEnvFile, err = coverEnvJsonToStr(oldInstall.Env)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
_ = appInstallResourceRepo.BatchUpdateBy(map[string]interface{}{"resource_id": newDB.ID}, commonRepo.WithByID(resource.ID))
|
|
||||||
|
|
||||||
if err := handlePostgresqlRecover(dto.CommonRecover{
|
if err := handlePostgresqlRecover(dto.CommonRecover{
|
||||||
Name: newDB.PostgresqlName,
|
Name: database.Name,
|
||||||
DetailName: newDB.Name,
|
DetailName: db.Name,
|
||||||
File: fmt.Sprintf("%s/%s.sql.gz", tmpPath, install.Name),
|
File: fmt.Sprintf("%s/%s.sql.gz", tmpPath, install.Name),
|
||||||
}, true); err != nil {
|
}, true); err != nil {
|
||||||
global.LOG.Errorf("handle recover from sql.gz failed, err: %v", err)
|
global.LOG.Errorf("handle recover from sql.gz failed, err: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
case constant.AppMysql, constant.AppMariaDB:
|
||||||
if database.Type == "mysql" || database.Type == "mariadb" {
|
|
||||||
db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId))
|
db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -295,32 +281,7 @@ func handleAppRecover(install *model.AppInstall, recoverFile string, isRollback
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func reCreatePostgresqlDB(dbID uint, database model.Database, oldEnv string) (*model.DatabasePostgresql, map[string]interface{}, error) {
|
|
||||||
postgresqlService := NewIPostgresqlService()
|
|
||||||
ctx := context.Background()
|
|
||||||
_ = postgresqlService.Delete(ctx, dto.PostgresqlDBDelete{ID: dbID, Database: database.Name, Type: database.Type, DeleteBackup: false, ForceDelete: true})
|
|
||||||
|
|
||||||
envMap := make(map[string]interface{})
|
|
||||||
if err := json.Unmarshal([]byte(oldEnv), &envMap); err != nil {
|
|
||||||
return nil, envMap, err
|
|
||||||
}
|
|
||||||
oldName, _ := envMap["PANEL_DB_NAME"].(string)
|
|
||||||
oldUser, _ := envMap["PANEL_DB_USER"].(string)
|
|
||||||
oldPassword, _ := envMap["PANEL_DB_USER_PASSWORD"].(string)
|
|
||||||
createDB, err := postgresqlService.Create(context.Background(), dto.PostgresqlDBCreate{
|
|
||||||
Name: oldName,
|
|
||||||
From: database.From,
|
|
||||||
Database: database.Name,
|
|
||||||
Format: "UTF8",
|
|
||||||
Username: oldUser,
|
|
||||||
Password: oldPassword,
|
|
||||||
SuperUser: true,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, envMap, err
|
|
||||||
}
|
|
||||||
return createDB, envMap, nil
|
|
||||||
}
|
|
||||||
func reCreateDB(dbID uint, database model.Database, oldEnv string) (*model.DatabaseMysql, map[string]interface{}, error) {
|
func reCreateDB(dbID uint, database model.Database, oldEnv string) (*model.DatabaseMysql, map[string]interface{}, error) {
|
||||||
mysqlService := NewIMysqlService()
|
mysqlService := NewIMysqlService()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user