mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-03-14 01:34:47 +08:00
fix: 解决 redis 6.x aof 备份失败的问题
This commit is contained in:
parent
c86822fd3d
commit
1502def9f5
@ -38,7 +38,11 @@ func (u *BackupService) RedisBackup() error {
|
|||||||
timeNow := time.Now().Format("20060102150405")
|
timeNow := time.Now().Format("20060102150405")
|
||||||
fileName := fmt.Sprintf("%s.rdb", timeNow)
|
fileName := fmt.Sprintf("%s.rdb", timeNow)
|
||||||
if appendonly == "yes" {
|
if appendonly == "yes" {
|
||||||
fileName = fmt.Sprintf("%s.tar.gz", timeNow)
|
if redisInfo.Version == "6.0.16" {
|
||||||
|
fileName = fmt.Sprintf("%s.aof", timeNow)
|
||||||
|
} else {
|
||||||
|
fileName = fmt.Sprintf("%s.tar.gz", timeNow)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
backupDir := fmt.Sprintf("%s/database/redis/%s", localDir, redisInfo.Name)
|
backupDir := fmt.Sprintf("%s/database/redis/%s", localDir, redisInfo.Name)
|
||||||
if err := handleRedisBackup(redisInfo, backupDir, fileName); err != nil {
|
if err := handleRedisBackup(redisInfo, backupDir, fileName); err != nil {
|
||||||
@ -90,6 +94,13 @@ func handleRedisBackup(redisInfo *repo.RootInfo, backupDir, fileName string) err
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if strings.HasSuffix(fileName, ".aof") {
|
||||||
|
stdout1, err := cmd.Execf("docker cp %s:/data/appendonly.aof %s/%s", redisInfo.ContainerName, backupDir, fileName)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(string(stdout1))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
stdout1, err1 := cmd.Execf("docker cp %s:/data/dump.rdb %s/%s", redisInfo.ContainerName, backupDir, fileName)
|
stdout1, err1 := cmd.Execf("docker cp %s:/data/dump.rdb %s/%s", redisInfo.ContainerName, backupDir, fileName)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
@ -108,15 +119,27 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if (appendonly == "yes" && !strings.HasSuffix(recoverFile, ".tar.gz")) || (appendonly != "yes" && !strings.HasSuffix(recoverFile, ".rdb")) {
|
|
||||||
return buserr.New(constant.ErrTypeOfRedis)
|
if appendonly == "yes" {
|
||||||
|
if !strings.HasSuffix(recoverFile, ".tar.gz") || !strings.HasSuffix(recoverFile, ".aof") {
|
||||||
|
return buserr.New(constant.ErrTypeOfRedis)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if !strings.HasSuffix(recoverFile, ".rdb") {
|
||||||
|
return buserr.New(constant.ErrTypeOfRedis)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
global.LOG.Infof("appendonly in redis conf is %s", appendonly)
|
global.LOG.Infof("appendonly in redis conf is %s", appendonly)
|
||||||
isOk := false
|
isOk := false
|
||||||
if !isRollback {
|
if !isRollback {
|
||||||
suffix := "tar.gz"
|
suffix := "rdb"
|
||||||
if appendonly != "yes" {
|
if appendonly == "yes" {
|
||||||
suffix = "rdb"
|
if redisInfo.Version == "6.0.16" {
|
||||||
|
suffix = "aof"
|
||||||
|
} else {
|
||||||
|
suffix = "tar.gz"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rollbackFile := fmt.Sprintf("%s/original/database/redis/%s_%s.%s", global.CONF.System.BaseDir, redisInfo.Name, time.Now().Format("20060102150405"), suffix)
|
rollbackFile := fmt.Sprintf("%s/original/database/redis/%s_%s.%s", global.CONF.System.BaseDir, redisInfo.Name, time.Now().Format("20060102150405"), suffix)
|
||||||
if err := handleRedisBackup(redisInfo, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil {
|
if err := handleRedisBackup(redisInfo, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil {
|
||||||
@ -140,17 +163,21 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback
|
|||||||
if _, err := compose.Down(composeDir + "/docker-compose.yml"); err != nil {
|
if _, err := compose.Down(composeDir + "/docker-compose.yml"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if appendonly == "yes" {
|
if appendonly == "yes" && redisInfo.Version == "7.0.5" {
|
||||||
redisDataDir := fmt.Sprintf("%s/%s/%s/data", constant.AppInstallDir, "redis", redisInfo.Name)
|
redisDataDir := fmt.Sprintf("%s/%s/%s/data", constant.AppInstallDir, "redis", redisInfo.Name)
|
||||||
if err := handleUnTar(recoverFile, redisDataDir); err != nil {
|
if err := handleUnTar(recoverFile, redisDataDir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
itemName := "dump.rdb"
|
||||||
|
if redisInfo.Version == "6.0.16" {
|
||||||
|
itemName = "appendonly.aof"
|
||||||
|
}
|
||||||
input, err := ioutil.ReadFile(recoverFile)
|
input, err := ioutil.ReadFile(recoverFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = ioutil.WriteFile(composeDir+"/data/dump.rdb", input, 0640); err != nil {
|
if err = ioutil.WriteFile(composeDir+"/data/"+itemName, input, 0640); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ func (u *CronjobService) HandleBackup(cronjob *model.Cronjob, startTime time.Tim
|
|||||||
|
|
||||||
fullPath := fmt.Sprintf("%s/%s", record.FileDir, fileName)
|
fullPath := fmt.Sprintf("%s/%s", record.FileDir, fileName)
|
||||||
if backup.Type == "LOCAL" {
|
if backup.Type == "LOCAL" {
|
||||||
u.HandleRmExpired(backup.Type, record.FileDir, cronjob, nil)
|
u.HandleRmExpired(backup.Type, backupDir, cronjob, nil)
|
||||||
return fullPath, nil
|
return fullPath, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@ type daemonJsonItem struct {
|
|||||||
|
|
||||||
func (u *DockerService) LoadDockerStatus() string {
|
func (u *DockerService) LoadDockerStatus() string {
|
||||||
status := constant.StatusRunning
|
status := constant.StatusRunning
|
||||||
// stdout, err := cmd.Exec("systemctl is-active docker")
|
stdout, err := cmd.Exec("systemctl is-active docker")
|
||||||
// if string(stdout) != "active\n" || err != nil {
|
if string(stdout) != "active\n" || err != nil {
|
||||||
// status = constant.Stopped
|
status = constant.Stopped
|
||||||
// }
|
}
|
||||||
|
|
||||||
return status
|
return status
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ const handleClose = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
name: [Rules.requiredInput, Rules.name],
|
name: [Rules.requiredInput, Rules.imageName],
|
||||||
driver: [Rules.requiredSelect],
|
driver: [Rules.requiredSelect],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<span class="status-count">{{ dialogData.rowData!.targetDir }}</span>
|
<span class="status-count">{{ dialogData.rowData!.targetDir }}</span>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="currentRecord?.status! !== 'Failed'"
|
v-if="currentRecord?.status! === 'Success'"
|
||||||
type="primary"
|
type="primary"
|
||||||
style="margin-left: 10px"
|
style="margin-left: 10px"
|
||||||
link
|
link
|
||||||
|
Loading…
x
Reference in New Issue
Block a user