/backups

Tool to backup databases.

Primary LanguagePythonMIT LicenseMIT

Backups

Github Status

Tool to backup databases.

Installation

pip install --upgrade backups

Usage

$ backups --help
Backups mysql databases

Usage:
  backups env
  backups ls                    [--file FILE] [--verbose]
  backups show JOB              [--file FILE] [--verbose]
  backups databases JOB         [--file FILE] [--verbose]
  backups run JOB               [--file FILE] [--verbose] [--dryrun]
  backups run JOB [DATABASE]    [--file FILE] [--verbose] [--dryrun]

Commands:
  env         Show the current environment
  ls          Prints the backup job names
  show        Prints the configuration for a job
  databases   Lists all databases on a backup job server
  run         Runs the backup for a job

Options:
  -f --file FILE    The backups config file (default /etc/backups/backups.yaml)
  -d --dryrun       Just prints the commands but doesn't execute them
  -v --verbose      Adds verbosity
  -h --help         Prints this help
     --version      Prints the current version

Environment variables:
  BACKUPS_FILE          The backups file (default /etc/backups/backups.yaml)
  BACKUPS_DUMPS_DIR     The dumps directory (default /tmp/backups)
  BACKUPS_MYSQLDUMP     The mysqldump binary (default picked from $PATH)
  BACKUPS_LOG_LEVEL     Default INFO
  BACKUPS_STDERR        The stderr log file (default /tmp/backups.err)

Check https://github.com/ptdorf/backups#backups for more info

Setup

Create a backups.yaml file with content similar to:

backups:
  jobs:
    acme:
      connection:
        type:     mysql
        host:     !Env ${BACKUPS_DB_HOST:acme.com}
        username: !Env ${BACKUPS_DB_USERNAME:backup}
        password: !Env ${BACKUPS_DB_PASSWORD}
      options:
        # Dumps the entire server into a single file (this is the default)
        server: true
        # By default it will create a single dump file for each database found
        # Uncomment to only backups specific databases (one on each file)
        # databases:
        # - main_db
        # - other_db
      compress:
      - type:     zip
        pasword:  !Env ${BACKUPS_ZIP_PASSWORD}
      upload:
      - type:     s3
        bucket:   acme-backups
        prefix:   databases
        enabled:  true
      notify:
      - type:     slack
        channel:  "#backups"
        webhook:  !Env ${BACKUPS_SLACK_WEBHOOK:https://hooks.slack.com/services/x/y/z}

Notice the use of the environment variables, like BACKUPS_DB_HOST, used in combination with the !Env yaml resolver. If they exist they get resolved to their values. Use the format ${VAR_NAME:default_value} to fallback to default_value when $VAR_NAME is not defined.

Now run it with

backups run acme --file backups.yaml

You can use the BACKUPS_FILE env var instead:

export BACKUPS_FILE=backups.yaml
backups run acme

Todos

  • Move type from connection to job.type
  • Add more types, like file
  • Document the use of !Conf @{/path/to/file.conf}
  • Use dynamic tags instead [1]

[1] For inspiration, check: