mirror of https://github.com/1Panel-dev/1Panel
fix: 备份恢复失败问题解决
parent
8f5028463a
commit
f57db29317
|
@ -98,7 +98,7 @@ func handleAppBackup(install *model.AppInstall, backupDir, fileName string) erro
|
|||
}
|
||||
|
||||
appPath := fmt.Sprintf("%s/%s/%s", constant.AppInstallDir, install.App.Key, install.Name)
|
||||
if err := fileOp.Compress([]string{appPath}, tmpDir, "app.tar.gz", files.TarGz); err != nil {
|
||||
if err := handleTar(appPath, tmpDir, "app.tar.gz", ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ func handleAppBackup(install *model.AppInstall, backupDir, fileName string) erro
|
|||
}
|
||||
}
|
||||
|
||||
if err := fileOp.Compress([]string{tmpDir}, backupDir, fileName, files.TarGz); err != nil {
|
||||
if err := handleTar(tmpDir, backupDir, fileName, ""); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -72,8 +72,7 @@ func (u *BackupService) MysqlRecoverByUpload(req dto.CommonRecover) error {
|
|||
}
|
||||
file := req.File
|
||||
fileName := path.Base(req.File)
|
||||
if !strings.HasSuffix(fileName, ".sql") && !strings.HasSuffix(fileName, ".gz") {
|
||||
fileOp := files.NewFileOp()
|
||||
if strings.HasSuffix(fileName, ".tar.gz") {
|
||||
fileNameItem := time.Now().Format("20060102150405")
|
||||
dstDir := fmt.Sprintf("%s/%s", path.Dir(req.File), fileNameItem)
|
||||
if _, err := os.Stat(dstDir); err != nil && os.IsNotExist(err) {
|
||||
|
@ -81,14 +80,7 @@ func (u *BackupService) MysqlRecoverByUpload(req dto.CommonRecover) error {
|
|||
return fmt.Errorf("mkdir %s failed, err: %v", dstDir, err)
|
||||
}
|
||||
}
|
||||
var compressType files.CompressType
|
||||
switch {
|
||||
case strings.HasSuffix(fileName, ".tar.gz"), strings.HasSuffix(fileName, ".tgz"):
|
||||
compressType = files.TarGz
|
||||
case strings.HasSuffix(fileName, ".zip"):
|
||||
compressType = files.Zip
|
||||
}
|
||||
if err := fileOp.Decompress(req.File, dstDir, compressType); err != nil {
|
||||
if err := handleUnTar(req.File, dstDir); err != nil {
|
||||
_ = os.RemoveAll(dstDir)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -152,6 +152,7 @@ func handleWebsiteRecover(website *model.Website, recoverFile string, isRollback
|
|||
if err := websiteRepo.SaveWithoutCtx(&oldWebsite); err != nil {
|
||||
return err
|
||||
}
|
||||
isOk = true
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -194,11 +195,11 @@ func handleWebsiteBackup(website *model.Website, backupDir, fileName string) err
|
|||
global.LOG.Info("put app.tar.gz into tmp dir successful")
|
||||
}
|
||||
websiteDir := fmt.Sprintf("%s/openresty/%s/www/sites/%s", constant.AppInstallDir, nginxInfo.Name, website.Alias)
|
||||
if err := fileOp.Compress([]string{websiteDir}, tmpDir, fmt.Sprintf("%s.web.tar.gz", website.Alias), files.TarGz); err != nil {
|
||||
if err := handleTar(websiteDir, tmpDir, fmt.Sprintf("%s.web.tar.gz", website.Alias), ""); err != nil {
|
||||
return err
|
||||
}
|
||||
global.LOG.Info("put web.tar.gz into tmp dir successful, now start to tar tmp dir")
|
||||
if err := fileOp.Compress([]string{tmpDir}, backupDir, fileName, files.TarGz); err != nil {
|
||||
if err := handleTar(tmpDir, backupDir, fileName, ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
@ -190,7 +190,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
|
|||
return
|
||||
}
|
||||
|
||||
if err := fileOp.Compress([]string{rootDir}, fmt.Sprintf("%s/system", localDir), fmt.Sprintf("1panel_%s_%s.tar.gz", versionItem.Value, timeNow), files.TarGz); err != nil {
|
||||
if err := handleTar(rootDir, fmt.Sprintf("%s/system", localDir), fmt.Sprintf("1panel_%s_%s.tar.gz", versionItem.Value, timeNow), ""); err != nil {
|
||||
updateSnapshotStatus(snap.ID, constant.StatusFailed, err.Error())
|
||||
return
|
||||
}
|
||||
|
@ -264,7 +264,7 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error {
|
|||
}
|
||||
fileOp := files.NewFileOp()
|
||||
if !isReTry || snap.InterruptStep == "Decompress" || (isReTry && req.ReDownload) {
|
||||
if err := fileOp.Decompress(fmt.Sprintf("%s/%s.tar.gz", baseDir, snap.Name), baseDir, files.TarGz); err != nil {
|
||||
if err := handleUnTar(fmt.Sprintf("%s/%s.tar.gz", baseDir, snap.Name), baseDir); err != nil {
|
||||
if req.ReDownload {
|
||||
updateRecoverStatus(snap.ID, snap.InterruptStep, constant.StatusFailed, fmt.Sprintf("decompress file failed, err: %v", err))
|
||||
return
|
||||
|
|
|
@ -28,7 +28,11 @@
|
|||
<el-table-column type="selection" fix />
|
||||
<el-table-column :label="$t('commons.table.name')" prop="fileName" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('database.source')" prop="backupType">
|
||||
<template #default="{ row }">{{ $t('setting.' + row.source) }}</template>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.source">
|
||||
{{ $t('setting.' + row.source) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="createdAt"
|
||||
|
|
|
@ -169,14 +169,7 @@ const beforeAvatarUpload = (rawFile) => {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
if (
|
||||
!rawFile.name.endsWith('.sql') &&
|
||||
!rawFile.name.endsWith('.zip') &&
|
||||
!rawFile.name.endsWith('.tar.gz') &&
|
||||
!rawFile.name.endsWith('.sql.gz') &&
|
||||
!rawFile.name.endsWith('.zip') &&
|
||||
!rawFile.name.endsWith('.tgz')
|
||||
) {
|
||||
if (!rawFile.name.endsWith('.sql') && !rawFile.name.endsWith('.tar.gz') && !rawFile.name.endsWith('.sql.gz')) {
|
||||
MsgError(i18n.global.t('commons.msg.unSupportType'));
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -291,9 +291,8 @@ export default {
|
|||
'This port is the exposed port of the container. You need to save the modification separately and restart the container!',
|
||||
|
||||
selectFile: 'Select file',
|
||||
supportUpType: 'Only sql, zip, sql.gz, and (tar.gz gz tgz) files within 10 MB are supported',
|
||||
zipFormat:
|
||||
'zip, tar.gz compressed package structure: test.zip or test.tar.gz compressed package must contain test.sql',
|
||||
supportUpType: 'Only sql, sql.gz, and tar.gz files within 10 MB are supported',
|
||||
zipFormat: 'tar.gz compressed package structure: test.tar.gz compressed package must contain test.sql',
|
||||
|
||||
currentStatus: 'Current state',
|
||||
runTime: 'Startup time',
|
||||
|
|
|
@ -299,8 +299,8 @@ export default {
|
|||
selectFile: '选择文件',
|
||||
dropHelper: '将上传文件拖拽到此处,或者',
|
||||
clickHelper: '点击上传',
|
||||
supportUpType: '仅支持 10M 以内 sql、zip、sql.gz、(tar.gz gz tgz) 文件',
|
||||
zipFormat: 'zip、tar.gz 压缩包结构:test.zip 或 test.tar.gz 压缩包内,必需包含 test.sql',
|
||||
supportUpType: '仅支持 10M 以内 sql、sql.gz、tar.gz 文件',
|
||||
zipFormat: 'tar.gz 压缩包结构:test.tar.gz 压缩包内,必需包含 test.sql',
|
||||
|
||||
currentStatus: '当前状态',
|
||||
baseParam: '基础参数',
|
||||
|
|
|
@ -104,6 +104,7 @@
|
|||
plain
|
||||
round
|
||||
size="small"
|
||||
:disabled="installed.status !== 'Running'"
|
||||
@click="openUploads(installed.app.key, installed.name)"
|
||||
v-if="mode === 'installed'"
|
||||
>
|
||||
|
@ -115,6 +116,7 @@
|
|||
plain
|
||||
round
|
||||
size="small"
|
||||
:disabled="installed.status !== 'Running'"
|
||||
@click="openBackups(installed.app.key, installed.name)"
|
||||
v-if="mode === 'installed'"
|
||||
>
|
||||
|
|
Loading…
Reference in New Issue