2021-08-18 18:25:59 +00:00
|
|
|
package main
|
|
|
|
|
2021-08-18 19:29:17 +00:00
|
|
|
import (
|
|
|
|
"github.com/docker/docker/api/types"
|
|
|
|
"strings"
|
|
|
|
)
|
2021-08-18 18:25:59 +00:00
|
|
|
|
|
|
|
type Dumper interface {
|
|
|
|
Dump() error
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewDumperFromContainer(container *types.ContainerJSON) Dumper {
|
|
|
|
switch container.Config.Image {
|
|
|
|
case "mysql":
|
|
|
|
fallthrough
|
|
|
|
case "mariadb":
|
|
|
|
return NewMysqlDumper(container)
|
|
|
|
case "postgres":
|
|
|
|
return NewPostgresDumper(container)
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
2021-08-18 19:29:17 +00:00
|
|
|
|
|
|
|
func dumpAllDatabases() error {
|
|
|
|
lock.Lock()
|
|
|
|
defer lock.Unlock()
|
|
|
|
|
|
|
|
for _, dumper := range store {
|
|
|
|
err := dumper.Dump()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func getDumpFilename(containerName string) string {
|
|
|
|
if strings.HasPrefix(containerName, "/") {
|
|
|
|
containerName = strings.TrimPrefix(containerName, "/")
|
|
|
|
}
|
|
|
|
|
|
|
|
return config.fullCurrentBackupPath + containerName + ".sql"
|
|
|
|
}
|