feat: add include and exclude filtering options for database discovery
Build and Push / build (godump, amd64, linux) (push) Successful in 18s

This commit is contained in:
2026-06-04 18:45:41 +00:00
parent 13009580f3
commit 9a417155fc
3 changed files with 44 additions and 8 deletions
+7
View File
@@ -90,6 +90,11 @@ instances:
backup_dir: /backups/primary
retention_days: 14
schedule: "0 2 * * *"
# Optional: explicitly include or exclude specific databases
# include:
# - my_app_db
# exclude:
# - temp_db
- name: secondary
host: 192.168.1.20
@@ -109,6 +114,8 @@ instances:
- `webhooks`: An array of webhook endpoints. Each can have its own `events` block to fire only on specific outcomes.
- `logging.file`: The path where log files should be written.
- `instances`: An array of MariaDB instances. Each requires its own name, connection details, backup directory, retention configuration (in days), and cron `schedule`.
- `include`: (Optional) If specified, ONLY the listed databases will be backed up.
- `exclude`: (Optional) If specified, the listed databases will be ignored. System databases are ALWAYS excluded automatically.
> **Note:** Make sure the user specified in the configuration has `SELECT`, `LOCK TABLES`, `SHOW VIEW`, and `TRIGGER` permissions to properly perform `mysqldump` operations across all databases.
+27
View File
@@ -39,6 +39,33 @@ func discoverDatabases(cfg config.InstanceConfig) ([]string, error) {
if err := rows.Scan(&name); err != nil {
return nil, err
}
if len(cfg.Include) > 0 {
included := false
for _, inc := range cfg.Include {
if name == inc {
included = true
break
}
}
if !included {
continue
}
}
if len(cfg.Exclude) > 0 {
excluded := false
for _, exc := range cfg.Exclude {
if name == exc {
excluded = true
break
}
}
if excluded {
continue
}
}
databases = append(databases, name)
}
+10 -8
View File
@@ -59,14 +59,16 @@ type LoggingConfig struct {
}
type InstanceConfig struct {
Name string `yaml:"name"`
Host string `yaml:"host"`
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
BackupDir string `yaml:"backup_dir"`
RetentionDays int `yaml:"retention_days"`
Schedule string `yaml:"schedule"`
Name string `yaml:"name"`
Host string `yaml:"host"`
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
BackupDir string `yaml:"backup_dir"`
RetentionDays int `yaml:"retention_days"`
Schedule string `yaml:"schedule"`
Include []string `yaml:"include,omitempty"`
Exclude []string `yaml:"exclude,omitempty"`
}
func LoadConfig(path string) (*Config, error) {