Skip to content

geusebi/zabbixbackup

Repository files navigation

Zabbix backup python script

Tox unittest Pylint

EXPERIMENTAL: use at your own risk!

Python script to perform zabbix dumps.

See full project documentation at https://www.zabbixbackup.com.

Inspired by the project https://github.com/npotorino/zabbix-backup.

Install

pip install zabbixbackup

Examples

Create a backup connecting as user postgres to the db zabbix with schema zabbix

python -m zabbixbackup psql --host 127.0.0.1 --user postgres --passwd mypassword --database zabbix --schema zabbix

Create a tar archive dump and save standard zabbix configuration files along with it.

python -m zabbixbackup psql --host 127.0.0.1 --passwd mypassword --format tar --save-files

Create a "custom" archive and save it to a backup folder, rotate backups to retain only the last four.

python -m zabbixbackup psql --host 127.0.0.1 --passwd mypassword --format custom --rotate 4

Setup an authentication (.pgpass) file and use it to login in subsequent call.

python -m zabbixbackup pgsql --host 127.0.0.1 \
          --passwd - --keep-login-file --dry-run
[input password]
mv .pgpass /root

python -m zabbixbackup pgsql --host 127.0.0.1 --login-file /root/.pgpass

Setup an authentication (mylogin.cnf) file and use it to login in subsequent call.

python -m zabbixbackup mysql --host 127.0.0.1 \
          --passwd - --keep-login-file --dry-run
[input password]
mv mylogin.cnf /root

python -m zabbixbackup mysql --host 127.0.0.1 --login-file /root/mylogin.cnf

First level CLI

usage: zabbixbackup [-h] {psql,pgsql,mysql} ...

options:
  -h, --help          show this help message and exit

DBMS:
  {psql,pgsql,mysql}
    psql (pgsql)      (see zabbixbackup psql --help)
    mysql             (see zabbixbackup mysql --help)

Options

Database engine

Main

Connection

Dump action

Dump compression

Configuration files

Output

Verbosity

Database engine

<DBMS> (psql|mysql)

Default: no default (mandatory)

Database engine to use. Either postgresql or mysql (mariasql compatible).

Read zabbix configuration

--read-zabbix-config, -z

Default: False

Try to read database host and credentials from Zabbix config. The file is read and parsed trying to collect as much as possible. Every variable collected will be used if not already provided by user arguments.

Implicit if --zabbix-config is set.

Zabbix configuration file

--zabbix-config ZBX_CONFIG, -Z ZBX_CONFIG

Default: /etc/zabbix/zabbix_server.conf

Zabbix configuration file path.

Read MySQL configuration (MySQL specific)

--read-mysql-config, -c

Default: False

Read database host and credentials from MySQL config file. Implicit if --mysql-config is set.

MySQL configuration file (MySQL specific)

--mysql-config MYSQL_CONFIG, -C MYSQL_CONFIG

Default: /etc/mysql/my.cnf

MySQL configuration file path. Implicit if --read-mysql-config is set.

Dry run

--dry-run, -D

Default: False

Do not create the actual backup, only show dump commands. Be aware that the database will be queried for tables selection and folders and files will be created. This is meant only for setup, inspection and debugging.

Hostname (special for Postgres)

--host, -H

Default: 127.0.0.1

Hostname/IP of DBMS server, to specify a blank value pass -.

For postgresql special rules might apply (see Postgres psql and pg_dump online documentation for sockets).

Port

--port PORT, -P PORT

Default: 5432 for Postgres, 3306 for MySQL)

Database connection port.

Socket (Mysql specific)

--socket SOCK, -S SOCK

Default: None

Path to MySQL socket file. Alternative to specifying host.

Username

--user USER, -u USER

Default: zabbix

Username to use for the database connection.

Password

--passwd PASSWD, -p PASSWD

Default: None

Database login password. Specify - for an interactive prompt. For Postgres, a .pgpass will be created to connect to the database and then deleted (might be saved with the backup).

Keep login file

--keep-login-file

Default: False

Do not delete login file (either .pgpass or mylogin.cnf) on program exit.

Useful to create the login file and avoid clear password or interactive prompt.

For postgres, the saved file is not hidden (pgpass).

Login file

--login-file LOGINFILE

Default: None

Use this file (either .pgpass or mylogin.cnf) for the authentication.

Database name

--database DBNAME, -d DBNAME

Default: zabbix

The name of the database to connect to.

Database schema (Postgres specific)

--schema SCHEMA, -s SCHEMA

Default: public

The name of the schema to use.

Reverse lookup

--reverse-lookup, -n

Default: True

(NOT IMPLEMENTED) Perform a reverse lookup of the IP address for the host.

Name

--name

Default: None

Use this name instead of host while creating the name of the archive.

The name must be alphanumeric, only - and . special characters are allowed).

Using this option automatically disable --reverse-lookup!

Unknown tables action

--unknown-action {dump,nodata,ignore,fail}, -U {dump,nodata,ignore,fail}

Default: ignore

Action for unknown tables.

Choose dump to dump the tables fully with definitions. nodata will include only the definitions. ignore will skip the unknown tables. fail will abort the backup in case of an unknown table.

Monitoring tables action

--monitoring-action {dump,nodata}, -U {dump,nodata}

Default: nodata

Action for monitoring table.

Choose dump do dump the tables fully with definitions. nodata will include only the definitions.

Add columns

--add-columns, -N

Default: False

Add column names in INSERT clauses and quote them as needed.

Postgres dump format

--pgformat PGFORMAT

Default: custom

Dump format, will mandate the file output format.

Available formats: plain, custom, directory, or tar (see postgres documentation).

Postgres dump compression

--pgcompression PGCOMPRESSION

Default: None

Passed as-is to pg_dump --compress, might be implied by format (see postgres documentation).

Be aware that the postgres tar format won't be compressed. In that case you could use --archive.

Dump compression

--mysqlcompression MYSQLCOMPRESSION

Default: -

Mysql dump compression.

- to leave the dump uncompressed as is.

Available compression formats are xz, gzip and bzip2. Use :<LEVEL> to set a compression.

The compression binary must be available in current shell. xz, gzip, and bzip2 will take precedence and 7z is used as fallback (might be useful on Windows platforms).

NOTE: on windows platforms this result is a compressed file with CRLF line termination instead of LF.

Save configuration files

--save-files

Default: False

Save folders and other files in the backup (see --files).

File index to save with the backup

--files FILES

Default: -

Save folders and other files as listed in this index file. Non existant will be ignored. Directory structure is replicated (copied via cp).

File format: one line per folder or file.

If FILES is - then the standard files are selected, i.e: /etc/zabbix/ and /usr/lib/zabbix/.

Backup archive format

--archive ARCHIVE, -a ARCHIVE

Default: -

Use tar to create a tar archive.

- to leave the backup uncompressed as a folder.

Available compression formats are xz, gzip and bzip2. Use :<LEVEL> to set a compression level. I.e. --archive xz:6.

Output directory

--outdir OUTDIR, -o OUTDIR

Default: .

The destination directory to save the backup to.

Backup rotation

--rotate ROTATE, -r ROTATE

Default: 0

Rotate backups while keeping up R old backups. Uses filenames to find old backups.
0 = keep everything.

Verbosity

--quiet, -q

--verbose, -v

--very-verbose, -V

--debug

Default: verbose

Don't print anything except unrecoverable errors (quiet),
print informations only (verbose),
print even more informations (very verbose),
print everything (debug).

Postgres SQL: second level CLI

zabbixbackup psql --help

usage: zabbixbackup psql [-h] [-z] [-Z ZBX_CONFIG] [-D] [-H HOST] [-P PORT]
                         [-u USER] [-p PASSWD] [--keep-login-file]
                         [--login-file LOGINFILE] [-d DBNAME] [-s SCHEMA] [-n]
                         [--name NAME] [-U {dump,nodata,ignore,fail}]
                         [-M {dump,nodata}] [-N] [-x PGCOMPRESSION]
                         [-f {plain,custom,directory,tar}] [--save-files]
                         [--files FILES] [-a ARCHIVE] [-o OUTDIR] [-r ROTATE]
                         [-q | -v | -V | --debug]

zabbix dump for psql inspired and directly translated from...

options:
  -h, --help            show this help message and exit
  -z, --read-zabbix-config
                        try to read database host and credentials from Zabbix
                        config. Implicit if `--zabbix-config` is set.
                        (default: False)
  -Z ZBX_CONFIG, --zabbix-config ZBX_CONFIG
                        Zabbix config file path. Implicit if `--read-zabbix-
                        config` is set. (default:
                        /etc/zabbix/zabbix_server.conf)
  -D, --dry-run         Do not create the actual backup, only show dump
                        commands. Be aware that the database will be queried
                        for tables selection and temporary folders and files
                        will be created. (default: False)

connection options:
  -H HOST, --host HOST  hostname/IP of DBMS server, to specify a blank value
                        pass '-'. If host starts with a slash it's interpreted
                        as a socket directory. Special rules might apply (see
                        postgre online documentation for sockets). (default:
                        127.0.0.1)
  -P PORT, --port PORT  DBMS port. (default: 5432)
  -u USER, --username USER
                        database login user. (default: zabbix)
  -p PASSWD, --passwd PASSWD
                        database login password (specify '-' for an
                        interactive prompt). (default: None)
  --keep-login-file     if a credential file is created (.pgpass) do not
                        delete it on exit. (default: False)
  --login-file LOGINFILE
                        use '.pgpass' file for the authentication. (default:
                        None)
  -d DBNAME, --database DBNAME
                        database name. (default: zabbix)
  -s SCHEMA, --schema SCHEMA
                        database schema. (default: public)
  -n, --reverse-lookup  (NOT IMPLEMENTED) perform a reverse lookup of the IP
                        address for the host. (default: True)
  --name NAME           use this name instead of 'host' for the backup name.
                        (allowed alphanum, -, .) (default: None)

dump action options:
  -U {dump,nodata,ignore,fail}, --unknown-action {dump,nodata,ignore,fail}
                        action for unknown tables. (default: ignore)
  -M {dump,nodata}, --monitoring-action {dump,nodata}
                        action for monitoring table (default: nodata)
  -N, --add-columns     add column names in INSERT clauses and quote them as
                        needed. (default: False)

dump level compression options:
  -x PGCOMPRESSION, --pgcompression PGCOMPRESSION
                        passed as-is to pg_dump --compress, might be implied
                        by format. (default: None)
  -f {plain,custom,directory,tar}, --pgformat {plain,custom,directory,tar}
                        dump format, will mandate the file output format.
                        (default: custom)

configuration files:
  --save-files          save folders and other files (see --files). (default:
                        False)
  --files FILES         save folders and other files as listed in this file.
                        One line per folder or file, non existant will be
                        ignored. Directory structure is replicated (copied via
                        'cp'). (default: -)

output options:
  -a ARCHIVE, --archive ARCHIVE
                        archive level compression. 'tar' to create a tar
                        archive, '-' to leave the backup uncompressed as a
                        folder. Other available formats are xz, gzip and
                        bzip2. Use ':<LEVEL>' to set a compression level. I.e.
                        --archive xz:6 (default: -)
  -o OUTDIR, --outdir OUTDIR
                        save database dump to 'outdir'. (default: .)
  -r ROTATE, --rotate ROTATE
                        rotate backups while keeping up 'R' old backups.Uses
                        filename to match '0=keep everything'. (default: 0)

verbosity:
  -q, --quiet           don't print anything except unrecoverable errors.
                        (default: False)
  -v, --verbose         print informations. (default: True)
  -V, --very-verbose    print even more informations. (default: False)
  --debug               print everything. (default: False)

MySQL: second level CLI

zabbixbackup mysql --help

usage: zabbixbackup mysql [-h] [-z] [-Z ZBX_CONFIG] [-c] [-C MYSQL_CONFIG]
                          [-D] [-H HOST] [-P PORT] [-S SOCK] [-u USER]
                          [-p PASSWD] [--keep-login-file]
                          [--login-file LOGINFILE] [-d DBNAME] [-n]
                          [--name NAME] [-U {dump,nodata,ignore,fail}]
                          [-M {dump,nodata}] [-N]
                          [--mysqlcompression MYSQLCOMPRESSION] [--save-files]
                          [--files FILES] [-a ARCHIVE] [-o OUTDIR] [-r ROTATE]
                          [-q | -v | -V | --debug]

zabbix dump for mysql inspired and directly translated from...

options:
  -h, --help            show this help message and exit
  -z, --read-zabbix-config
                        try to read database host and credentials from Zabbix
                        config. Implicit if `--zabbix-config` is set.
                        (default: False)
  -Z ZBX_CONFIG, --zabbix-config ZBX_CONFIG
                        Zabbix config file path. Implicit if `--read-zabbix-
                        config` is set. (default:
                        /etc/zabbix/zabbix_server.conf)
  -c, --read-mysql-config
                        Read database host and credentials from MySQL config
                        file. Implicit if `--mysql-config` is set. (default:
                        False)
  -C MYSQL_CONFIG, --mysql-config MYSQL_CONFIG
                        MySQL config file path. Implicit if `--read-mysql-
                        config` is set. (default: /etc/mysql/my.cnf)
  -D, --dry-run         Do not create the actual backup, only show dump
                        commands. Be aware that the database will be queried
                        for tables selection and temporary folders and files
                        will be created. (default: False)

connection options:
  -H HOST, --host HOST  hostname/IP of DBMS server, to specify a blank value
                        pass '-'. (default: 127.0.0.1)
  -P PORT, --port PORT  DBMS port. (default: 3306)
  -S SOCK, --socket SOCK
                        path to DBMS socket file. Alternative to specifying
                        host. (default: None)
  -u USER, --username USER
                        database login user. (default: zabbix)
  -p PASSWD, --passwd PASSWD
                        database login password (specify '-' for an
                        interactive prompt). (default: None)
  --keep-login-file     if a credential file is created (mylogin.cnf) do not
                        delete it on exit. (default: False)
  --login-file LOGINFILE
                        use 'mylogin.cnf' file for the authentication.
                        (default: None)
  -d DBNAME, --database DBNAME
                        database name. (default: zabbix)
  -n, --reverse-lookup  (NOT IMPLEMENTED) perform a reverse lookup of the IP
                        address for the host. (default: True)
  --name NAME           use this name instead of 'host' for the backup name.
                        (allowed alphanum, -, .) (default: None)

dump action options:
  -U {dump,nodata,ignore,fail}, --unknown-action {dump,nodata,ignore,fail}
                        action for unknown tables. (default: ignore)
  -M {dump,nodata}, --monitoring-action {dump,nodata}
                        action for monitoring table (default: nodata)
  -N, --add-columns     add column names in INSERT clauses and quote them as
                        needed. (default: False)

dump level compression options:
  --mysqlcompression MYSQLCOMPRESSION
                        dump level compression. Available formats are xz, gzip
                        and bzip2. Use ':<LEVEL>' to set a compression level.
                        I.e. --archive xz:6. See documentation for the
                        details. (default: gzip:6)

configuration files:
  --save-files          save folders and other files (see --files). (default:
                        False)
  --files FILES         save folders and other files as listed in this file.
                        One line per folder or file, non existant will be
                        ignored. Directory structure is replicated (copied via
                        'cp'). (default: -)

output options:
  -a ARCHIVE, --archive ARCHIVE
                        archive level compression. 'tar' to create a tar
                        archive, '-' to leave the backup uncompressed as a
                        folder. Other available formats are xz, gzip and
                        bzip2. Use ':<LEVEL>' to set a compression level. I.e.
                        --archive xz:6 (default: -)
  -o OUTDIR, --outdir OUTDIR
                        save database dump to 'outdir'. (default: .)
  -r ROTATE, --rotate ROTATE
                        rotate backups while keeping up 'R' old backups.Uses
                        filename to match '0=keep everything'. (default: 0)

verbosity:
  -q, --quiet           don't print anything except unrecoverable errors.
                        (default: False)
  -v, --verbose         print informations. (default: True)
  -V, --very-verbose    print even more informations. (default: False)
  --debug               print everything. (default: False)

About

Zabbix backup utility in Python

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages