MCPcopy
hub / github.com/kingwrcy/moments / backupDatabase

Function backupDatabase

backend/backup.go:21–96  ·  view source on GitHub ↗
(log zerolog.Logger, cfg *vo.AppConfig)

Source from the content-addressed store, hash-verified

19)
20
21func backupDatabase(log zerolog.Logger, cfg *vo.AppConfig) {
22 if !fs_util.Exists(cfg.DB) {
23 log.Debug().Msgf("原数据库不存在, 所以无需备份数据库")
24 return
25 }
26
27 db, err := gorm.Open(sqlite.Open(cfg.DB))
28 if err != nil {
29 log.Fatal().Msgf("打开原数据库出错, err: %v", err)
30 return
31 }
32
33 var sysConfig string
34 db.Raw("SELECT content FROM SysConfig").Scan(&sysConfig)
35
36 var config map[string]any
37 err = json.Unmarshal([]byte(sysConfig), &config)
38 if err != nil {
39 log.Fatal().Msgf("反序列化原配置出错, err: %v", err)
40 return
41 }
42
43 version, ok := config["version"].(string)
44 if !ok {
45 version = "unknown"
46 }
47
48 commitId, ok = config["commitId"].(string)
49 if !ok {
50 commitId = "unknown"
51 }
52
53 if version == cfg.Version && commitId == cfg.CommitId {
54 log.Debug().Msgf("当前版本和上次启动时的版本一致, 所以无需备份数据库, version: %s, commitId: %s", version, commitId)
55 return
56 }
57
58 log.Info().Msgf("开始备份数据库")
59
60 sourceFile, err := os.Open(cfg.DB)
61 if err != nil {
62 log.Error().Msgf("打开原数据库文件出错, err: %v", err)
63 return
64 }
65 defer sourceFile.Close()
66
67 now := time.Now()
68 datetime := now.Format("2006-01-02-15-04-05")
69 destinationFileName := fmt.Sprintf("backup-%s-%s-%s.sqlite3", datetime, version, commitId)
70
71 destinationFile, err := os.Create(path.Join(path.Dir(cfg.DB), destinationFileName))
72 if err != nil {
73 log.Error().Msgf("创建备份数据库文件失败, err: %v", err)
74 return
75 }
76 defer destinationFile.Close()
77
78 _, err = io.Copy(destinationFile, sourceFile)

Callers 1

mainFunction · 0.85

Calls 3

cleanBackupFilesFunction · 0.85
InfoMethod · 0.80
ErrorMethod · 0.80

Tested by

no test coverage detected