Add MongoDB database hook documentation.
This commit is contained in:
parent
07d7ae60d5
commit
2ee75546f5
9 changed files with 48 additions and 22 deletions
1
NEWS
1
NEWS
|
@ -1,4 +1,5 @@
|
||||||
1.5.22.dev0
|
1.5.22.dev0
|
||||||
|
* #288: Database dump hooks for MongoDB.
|
||||||
* #470: Move mysqldump options to the beginning of the command due to MySQL bug 30994.
|
* #470: Move mysqldump options to the beginning of the command due to MySQL bug 30994.
|
||||||
* #471: When command-line configuration override produces a parse error, error cleanly instead of
|
* #471: When command-line configuration override produces a parse error, error cleanly instead of
|
||||||
tracebacking.
|
tracebacking.
|
||||||
|
|
|
@ -65,11 +65,11 @@ borgmatic is powered by [Borg Backup](https://www.borgbackup.org/).
|
||||||
<a href="https://www.postgresql.org/"><img src="docs/static/postgresql.png" alt="PostgreSQL" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://www.postgresql.org/"><img src="docs/static/postgresql.png" alt="PostgreSQL" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://www.mysql.com/"><img src="docs/static/mysql.png" alt="MySQL" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://www.mysql.com/"><img src="docs/static/mysql.png" alt="MySQL" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://mariadb.com/"><img src="docs/static/mariadb.png" alt="MariaDB" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://mariadb.com/"><img src="docs/static/mariadb.png" alt="MariaDB" height="60px" style="margin-bottom:20px;"></a>
|
||||||
|
<a href="https://www.mongodb.com/"><img src="docs/static/mongodb.png" alt="MongoDB" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://healthchecks.io/"><img src="docs/static/healthchecks.png" alt="Healthchecks" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://healthchecks.io/"><img src="docs/static/healthchecks.png" alt="Healthchecks" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://cronitor.io/"><img src="docs/static/cronitor.png" alt="Cronitor" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://cronitor.io/"><img src="docs/static/cronitor.png" alt="Cronitor" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://cronhub.io/"><img src="docs/static/cronhub.png" alt="Cronhub" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://cronhub.io/"><img src="docs/static/cronhub.png" alt="Cronhub" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://www.pagerduty.com/"><img src="docs/static/pagerduty.png" alt="PagerDuty" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://www.pagerduty.com/"><img src="docs/static/pagerduty.png" alt="PagerDuty" height="60px" style="margin-bottom:20px;"></a>
|
||||||
<a href="https://www.rsync.net/cgi-bin/borg.cgi?campaign=borg&adgroup=borgmatic"><img src="docs/static/rsyncnet.png" alt="rsync.net" height="60px" style="margin-bottom:20px;"></a>
|
|
||||||
<a href="https://www.borgbase.com/?utm_source=borgmatic"><img src="docs/static/borgbase.png" alt="BorgBase" height="60px" style="margin-bottom:20px;"></a>
|
<a href="https://www.borgbase.com/?utm_source=borgmatic"><img src="docs/static/borgbase.png" alt="BorgBase" height="60px" style="margin-bottom:20px;"></a>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -798,7 +798,7 @@ properties:
|
||||||
port:
|
port:
|
||||||
type: integer
|
type: integer
|
||||||
description: Port to connect to. Defaults to 27017.
|
description: Port to connect to. Defaults to 27017.
|
||||||
example: 27017
|
example: 27018
|
||||||
username:
|
username:
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
|
@ -811,15 +811,14 @@ properties:
|
||||||
Password with which to connect to the database.
|
Password with which to connect to the database.
|
||||||
Skip it if no authentication is needed.
|
Skip it if no authentication is needed.
|
||||||
example: trustsome1
|
example: trustsome1
|
||||||
auth_db:
|
authentication_database:
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
Authentication database where the specified
|
Authentication database where the specified
|
||||||
username has been created.
|
username exists. If no authentication database
|
||||||
If no authentication database is specified,
|
is specified, the database provided in "name"
|
||||||
the databse provided in "name" will be used.
|
is used. If "name" is "all", the "admin"
|
||||||
If "name" is "all", the "admin" database will
|
database is used.
|
||||||
be used.
|
|
||||||
example: admin
|
example: admin
|
||||||
format:
|
format:
|
||||||
type: string
|
type: string
|
||||||
|
|
|
@ -72,8 +72,8 @@ def build_dump_command(database, dump_filename, dump_format):
|
||||||
command.extend(('--username', database['username']))
|
command.extend(('--username', database['username']))
|
||||||
if 'password' in database:
|
if 'password' in database:
|
||||||
command.extend(('--password', database['password']))
|
command.extend(('--password', database['password']))
|
||||||
if 'auth_db' in database:
|
if 'authentication_database' in database:
|
||||||
command.extend(('--authenticationDatabase', database['auth_db']))
|
command.extend(('--authenticationDatabase', database['authentication_database']))
|
||||||
if not all_databases:
|
if not all_databases:
|
||||||
command.extend(('--db', database['name']))
|
command.extend(('--db', database['name']))
|
||||||
if 'options' in database:
|
if 'options' in database:
|
||||||
|
@ -157,6 +157,6 @@ def build_restore_command(extract_process, database, dump_filename):
|
||||||
command.extend(('--username', database['username']))
|
command.extend(('--username', database['username']))
|
||||||
if 'password' in database:
|
if 'password' in database:
|
||||||
command.extend(('--password', database['password']))
|
command.extend(('--password', database['password']))
|
||||||
if 'auth_db' in database:
|
if 'authentication_database' in database:
|
||||||
command.extend(('--authenticationDatabase', database['auth_db']))
|
command.extend(('--authenticationDatabase', database['authentication_database']))
|
||||||
return command
|
return command
|
||||||
|
|
|
@ -15,7 +15,8 @@ consistent snapshot that is more suited for backups.
|
||||||
|
|
||||||
Fortunately, borgmatic includes built-in support for creating database dumps
|
Fortunately, borgmatic includes built-in support for creating database dumps
|
||||||
prior to running backups. For example, here is everything you need to dump and
|
prior to running backups. For example, here is everything you need to dump and
|
||||||
backup a couple of local PostgreSQL databases and a MySQL/MariaDB database:
|
backup a couple of local PostgreSQL databases, a MySQL/MariaDB database, and a
|
||||||
|
MongoDB database:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
hooks:
|
hooks:
|
||||||
|
@ -24,12 +25,15 @@ hooks:
|
||||||
- name: orders
|
- name: orders
|
||||||
mysql_databases:
|
mysql_databases:
|
||||||
- name: posts
|
- name: posts
|
||||||
|
mongodb_databases:
|
||||||
|
- name: messages
|
||||||
```
|
```
|
||||||
|
|
||||||
As part of each backup, borgmatic streams a database dump for each configured
|
As part of each backup, borgmatic streams a database dump for each configured
|
||||||
database directly to Borg, so it's included in the backup without consuming
|
database directly to Borg, so it's included in the backup without consuming
|
||||||
additional disk space. (The one exception is PostgreSQL's "directory" dump
|
additional disk space. (The exceptions are the PostgreSQL/MongoDB "directory"
|
||||||
format, which can't stream and therefore does consume temporary disk space.)
|
dump formats, which can't stream and therefore do consume temporary disk
|
||||||
|
space.)
|
||||||
|
|
||||||
To support this, borgmatic creates temporary named pipes in `~/.borgmatic` by
|
To support this, borgmatic creates temporary named pipes in `~/.borgmatic` by
|
||||||
default. To customize this path, set the `borgmatic_source_directory` option
|
default. To customize this path, set the `borgmatic_source_directory` option
|
||||||
|
@ -59,6 +63,14 @@ hooks:
|
||||||
username: root
|
username: root
|
||||||
password: trustsome1
|
password: trustsome1
|
||||||
options: "--skip-comments"
|
options: "--skip-comments"
|
||||||
|
mongodb_databases:
|
||||||
|
- name: messages
|
||||||
|
hostname: database3.example.org
|
||||||
|
port: 27018
|
||||||
|
username: dbuser
|
||||||
|
password: trustsome1
|
||||||
|
authentication_database: mongousers
|
||||||
|
options: "--ssl"
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to dump all databases on a host, use `all` for the database name:
|
If you want to dump all databases on a host, use `all` for the database name:
|
||||||
|
@ -69,13 +81,15 @@ hooks:
|
||||||
- name: all
|
- name: all
|
||||||
mysql_databases:
|
mysql_databases:
|
||||||
- name: all
|
- name: all
|
||||||
|
mongodb_databases:
|
||||||
|
- name: all
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that you may need to use a `username` of the `postgres` superuser for
|
Note that you may need to use a `username` of the `postgres` superuser for
|
||||||
this to work with PostgreSQL.
|
this to work with PostgreSQL.
|
||||||
|
|
||||||
If you would like to backup databases only and not source directories, you can
|
If you would like to backup databases only and not source directories, you can
|
||||||
specify an empty `source_directories` value because it is a mandatory field:
|
specify an empty `source_directories` value (as it is a mandatory field):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
location:
|
location:
|
||||||
|
@ -97,7 +111,7 @@ bring back any missing configuration files in order to restore a database.
|
||||||
|
|
||||||
## Supported databases
|
## Supported databases
|
||||||
|
|
||||||
As of now, borgmatic supports PostgreSQL and MySQL/MariaDB databases
|
As of now, borgmatic supports PostgreSQL, MySQL/MariaDB, and MongoDB databases
|
||||||
directly. But see below about general-purpose preparation and cleanup hooks as
|
directly. But see below about general-purpose preparation and cleanup hooks as
|
||||||
a work-around with other database systems. Also, please [file a
|
a work-around with other database systems. Also, please [file a
|
||||||
ticket](https://torsion.org/borgmatic/#issues) for additional database systems
|
ticket](https://torsion.org/borgmatic/#issues) for additional database systems
|
||||||
|
@ -196,8 +210,8 @@ that may not be exhaustive.
|
||||||
If you prefer to restore a database without the help of borgmatic, first
|
If you prefer to restore a database without the help of borgmatic, first
|
||||||
[extract](https://torsion.org/borgmatic/docs/how-to/extract-a-backup/) an
|
[extract](https://torsion.org/borgmatic/docs/how-to/extract-a-backup/) an
|
||||||
archive containing a database dump, and then manually restore the dump file
|
archive containing a database dump, and then manually restore the dump file
|
||||||
found within the extracted `~/.borgmatic/` path (e.g. with `pg_restore` or
|
found within the extracted `~/.borgmatic/` path (e.g. with `pg_restore`,
|
||||||
`mysql` commands).
|
`mysql`, or `mongorestore`, commands).
|
||||||
|
|
||||||
|
|
||||||
## Preparation and cleanup hooks
|
## Preparation and cleanup hooks
|
||||||
|
|
BIN
docs/static/mongodb.png
vendored
Normal file
BIN
docs/static/mongodb.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
docs/static/rsyncnet.png
vendored
BIN
docs/static/rsyncnet.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 7.3 KiB |
|
@ -52,7 +52,7 @@ hooks:
|
||||||
hostname: mongodb
|
hostname: mongodb
|
||||||
username: root
|
username: root
|
||||||
password: test
|
password: test
|
||||||
auth_db: admin
|
authentication_database: admin
|
||||||
- name: all
|
- name: all
|
||||||
hostname: mongodb
|
hostname: mongodb
|
||||||
username: root
|
username: root
|
||||||
|
|
|
@ -67,7 +67,14 @@ def test_dump_databases_runs_mongodump_with_hostname_and_port():
|
||||||
|
|
||||||
|
|
||||||
def test_dump_databases_runs_mongodump_with_username_and_password():
|
def test_dump_databases_runs_mongodump_with_username_and_password():
|
||||||
databases = [{'name': 'foo', 'username': 'mongo', 'password': 'trustsome1', 'auth_db': "admin"}]
|
databases = [
|
||||||
|
{
|
||||||
|
'name': 'foo',
|
||||||
|
'username': 'mongo',
|
||||||
|
'password': 'trustsome1',
|
||||||
|
'authentication_database': "admin",
|
||||||
|
}
|
||||||
|
]
|
||||||
process = flexmock()
|
process = flexmock()
|
||||||
flexmock(module).should_receive('make_dump_path').and_return('')
|
flexmock(module).should_receive('make_dump_path').and_return('')
|
||||||
flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
|
flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
|
||||||
|
@ -216,7 +223,12 @@ def test_restore_database_dump_runs_pg_restore_with_hostname_and_port():
|
||||||
|
|
||||||
def test_restore_database_dump_runs_pg_restore_with_username_and_password():
|
def test_restore_database_dump_runs_pg_restore_with_username_and_password():
|
||||||
database_config = [
|
database_config = [
|
||||||
{'name': 'foo', 'username': 'mongo', 'password': 'trustsome1', 'auth_db': 'admin'}
|
{
|
||||||
|
'name': 'foo',
|
||||||
|
'username': 'mongo',
|
||||||
|
'password': 'trustsome1',
|
||||||
|
'authentication_database': 'admin',
|
||||||
|
}
|
||||||
]
|
]
|
||||||
extract_process = flexmock(stdout=flexmock())
|
extract_process = flexmock(stdout=flexmock())
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue