From 173e3e9cc13784fd1158dccda46173891d342c4e Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Fri, 15 Sep 2023 18:48:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=A4=87=E4=BB=BD=E9=80=BB=E8=BE=91=20(#2315)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/service/backup_mysql.go | 2 +- backend/app/service/cronjob_helper.go | 2 +- backend/init/migration/migrate.go | 2 +- backend/init/migration/migrations/init.go | 99 +++++++++++++-------- backend/utils/mysql/client/info.go | 24 +---- frontend/src/components/backup/index.vue | 17 ++-- frontend/src/components/upload/index.vue | 4 +- frontend/src/views/database/mysql/index.vue | 3 +- 8 files changed, 79 insertions(+), 74 deletions(-) diff --git a/backend/app/service/backup_mysql.go b/backend/app/service/backup_mysql.go index 3f73d8396..e70f06bfc 100644 --- a/backend/app/service/backup_mysql.go +++ b/backend/app/service/backup_mysql.go @@ -42,7 +42,7 @@ func (u *BackupService) MysqlBackup(req dto.CommonBackup) error { record := &model.BackupRecord{ Type: req.Type, - Name: dirName, + Name: fmt.Sprintf("%v", database.ID), DetailName: req.DetailName, Source: "LOCAL", BackupType: "LOCAL", diff --git a/backend/app/service/cronjob_helper.go b/backend/app/service/cronjob_helper.go index 100daa091..0f816920d 100644 --- a/backend/app/service/cronjob_helper.go +++ b/backend/app/service/cronjob_helper.go @@ -298,7 +298,7 @@ func (u *CronjobService) handleDatabase(cronjob model.Cronjob, backup model.Back record.BackupType = backup.Type dirName := fmt.Sprintf("%s-%s", database.From, database.Name) - record.Name = dirName + record.Name = fmt.Sprintf("%v", database.ID) backupDir := path.Join(localDir, fmt.Sprintf("database/%s/%s/%s", database.Type, dirName, dbInfo.Name)) record.FileName = fmt.Sprintf("db_%s_%s.sql.gz", dbInfo.Name, startTime.Format("20060102150405")) if err = handleMysqlBackup(dbInfo.DatabaseID, dbInfo.Name, backupDir, record.FileName); err != nil { diff --git a/backend/init/migration/migrate.go b/backend/init/migration/migrate.go index 47a8128a0..79b33f91e 100644 --- a/backend/init/migration/migrate.go +++ b/backend/init/migration/migrate.go @@ -44,7 +44,7 @@ func Init() { migrations.UpdateAppInstallResource, migrations.DropDatabaseLocal, migrations.AddDatabaseID, - migrations.RemoveDatabaseUnique, + migrations.UpdataBackupRecord, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/backend/init/migration/migrations/init.go b/backend/init/migration/migrations/init.go index 18100115f..79a6b47e6 100644 --- a/backend/init/migration/migrations/init.go +++ b/backend/init/migration/migrations/init.go @@ -2,6 +2,7 @@ package migrations import ( "fmt" + "strconv" "strings" "time" @@ -571,6 +572,23 @@ var AddTableFirewall = &gormigrate.Migration{ var AddDatabases = &gormigrate.Migration{ ID: "20230831-add-databases", Migrate: func(tx *gorm.DB) error { + var ( + backups []model.BackupRecord + databases []model.Database + ) + _ = tx.Where("type = ? OR type = ?", "mysql", "mariadb").Find(&backups).Error + _ = tx.Where("from = ?", "remote").Find(&databases).Error + _ = tx.Where("name = ? AND address = ? AND type = ?", "local", "127.0.0.1", "mysql").Delete(&model.Database{}).Error + for _, backup := range backups { + for _, database := range databases { + if backup.Name == database.Name && backup.Type == database.Type { + _ = tx.Model(&model.BackupRecord{}).Where("id = ?", backup.ID).Updates(map[string]interface{}{ + "name": fmt.Sprintf("%v", database.ID), + }).Error + break + } + } + } installRepo := repo.NewIAppInstallRepo() mysql := addDatabaseData("mysql", installRepo) if mysql.AppInstallID != 0 { @@ -609,6 +627,21 @@ var AddDatabases = &gormigrate.Migration{ } } + _ = tx.Where("type = ? OR type = ?", "mysql", "mariadb").Find(&backups).Error + _ = tx.Where("from = ?", "local").Find(&databases).Error + for _, backup := range backups { + if _, err := strconv.Atoi(backup.Name); err == nil { + continue + } + for _, database := range databases { + if backup.Name == database.Name && backup.Type == database.Type { + _ = tx.Model(&model.BackupRecord{}).Where("id = ?", backup.ID).Updates(map[string]interface{}{ + "name": fmt.Sprintf("%v", database.ID), + }).Error + break + } + } + } return nil }, } @@ -627,37 +660,15 @@ var UpdateDatabase = &gormigrate.Migration{ return nil } for _, data := range datas { - if data.Name == "local" && data.Address == "127.0.0.1" && data.Type == "mysql" { - installRepo := repo.NewIAppInstallRepo() - mysqlInfo, err := installRepo.LoadBaseInfo("mysql", "") - if err != nil { - continue - } - pass, err := encrypt.StringEncrypt(data.Password) - if err != nil { - global.LOG.Errorf("encrypt database %s password failed, err: %v", data.Name, err) - continue - } - if err := tx.Model(&model.Database{}).Where("id = ?", data.ID).Updates(map[string]interface{}{ - "app_install_id": mysqlInfo.ID, - "name": mysqlInfo.Name, - "password": pass, - "port": service.DatabaseKeys["mysql"], - "address": mysqlInfo.ServiceName, - }).Error; err != nil { - global.LOG.Errorf("updata database %s info failed, err: %v", data.Name, err) - } - } else { - pass, err := encrypt.StringEncrypt(data.Password) - if err != nil { - global.LOG.Errorf("encrypt database %s password failed, err: %v", data.Name, err) - continue - } - if err := tx.Model(&model.Database{}).Where("id = ?", data.ID).Updates(map[string]interface{}{ - "password": pass, - }).Error; err != nil { - global.LOG.Errorf("updata database %s info failed, err: %v", data.Name, err) - } + pass, err := encrypt.StringEncrypt(data.Password) + if err != nil { + global.LOG.Errorf("encrypt database %s password failed, err: %v", data.Name, err) + continue + } + if err := tx.Model(&model.Database{}).Where("id = ?", data.ID).Updates(map[string]interface{}{ + "password": pass, + }).Error; err != nil { + global.LOG.Errorf("updata database %s info failed, err: %v", data.Name, err) } } @@ -707,7 +718,7 @@ var DropDatabaseLocal = &gormigrate.Migration{ var AddDatabaseID = &gormigrate.Migration{ ID: "20230914-add-database-id", Migrate: func(tx *gorm.DB) error { - if err := tx.AutoMigrate(&model.DatabaseMysql{}); err != nil { + if err := tx.AutoMigrate(&model.DatabaseMysql{}, &model.Database{}); err != nil { return err } var ( @@ -735,11 +746,27 @@ var AddDatabaseID = &gormigrate.Migration{ }, } -var RemoveDatabaseUnique = &gormigrate.Migration{ - ID: "20230914-update-database", +var UpdataBackupRecord = &gormigrate.Migration{ + ID: "20230915-update-backup-record", Migrate: func(tx *gorm.DB) error { - if err := tx.AutoMigrate(&model.Database{}); err != nil { - return err + var ( + backups []model.BackupRecord + databases []model.Database + ) + _ = tx.Where("type = ? OR type = ?", "mysql", "mariadb").Find(&backups).Error + _ = tx.Find(&databases).Error + for _, backup := range backups { + if _, err := strconv.Atoi(backup.Name); err == nil { + continue + } + for _, database := range databases { + if backup.Name == database.Name && backup.Type == database.Type { + _ = tx.Model(&model.BackupRecord{}).Where("id = ?", backup.ID).Updates(map[string]interface{}{ + "name": fmt.Sprintf("%v", database.ID), + }).Error + break + } + } } return nil }, diff --git a/backend/utils/mysql/client/info.go b/backend/utils/mysql/client/info.go index 4e6ce47dd..955b8190d 100644 --- a/backend/utils/mysql/client/info.go +++ b/backend/utils/mysql/client/info.go @@ -1,7 +1,6 @@ package client import ( - mathRand "math/rand" "strings" "github.com/1Panel-dev/1Panel/backend/utils/common" @@ -112,26 +111,5 @@ func randomPassword(user string) string { if len(user) > 6 { passwdItem = user[:6] } - num := []rune("1234567890") - uppercase := []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ") - lowercase := []rune("abcdefghijklmnopqrstuvwxyz") - special := []rune(".%@!~_-") - - b := make([]rune, 10) - for i := 0; i < 2; i++ { - b[i] = lowercase[mathRand.Intn(len(lowercase))] - } - for i := 2; i < 4; i++ { - b[i] = uppercase[mathRand.Intn(len(uppercase))] - } - b[4] = special[mathRand.Intn(len(special))] - for i := 5; i < 9; i++ { - b[i] = num[mathRand.Intn(len(num))] - } - - for i := len(b) - 1; i > 0; i-- { - j := mathRand.Intn(i + 1) - b[i], b[j] = b[j], b[i] - } - return passwdItem + "-" + (string(b)) + return passwdItem + "@" + common.RandStrAndNum(8) } diff --git a/frontend/src/components/backup/index.vue b/frontend/src/components/backup/index.vue index 217d8c5bc..eb0333591 100644 --- a/frontend/src/components/backup/index.vue +++ b/frontend/src/components/backup/index.vue @@ -3,7 +3,13 @@