diff --git a/docs/backups.md b/docs/backups.md index c9fc2b0d0de110ff4fa9eeb3b3a9d1170f35d27b..2478778f46a0bec34e28a5308651002c5aa89c58 100644 --- a/docs/backups.md +++ b/docs/backups.md @@ -76,12 +76,13 @@ or just a sub-directory: ### Mariadb -For Mariadb backups are made using mariabackup to `mysql_backup_dir`.Backups can are made and -restored using the `mariabackup` tool. See also [official MariaDB docs](https://mariadb.com/kb/en/full-backup-and-restore-with-mariabackup/). +For Mariadb backups are made using mariabackup to `backup_mysql_dir`. Backups +are made and can be restored using the `mariadb-backup` tool. See also +[official MariaDB docs](https://mariadb.com/kb/en/full-backup-and-restore-with-mariabackup/). ### PostgreSQL -For PostgreSQL backups are made using pg_dump to `postgres_backup_dir`. +For PostgreSQL backups are made using pg_dump to `backup_postgres_dir`. Restoring backups can be done with `pg_restore`. See also [official PostgreSQL docs](https://www.postgresql.org/docs/current/app-pgrestore.html). diff --git a/roles/borg_client/defaults/main.yml b/roles/borg_client/defaults/main.yml index c12a4bd908c3227a373e49c3181f68fe3489bff2..aa303d8bdbd0c365de6f4bfd7965ecf0158eab9c 100644 --- a/roles/borg_client/defaults/main.yml +++ b/roles/borg_client/defaults/main.yml @@ -7,3 +7,7 @@ backup_hosts: dir: "~/backup/{{ inventory_hostname }}" suffix: "-offsite" borg_cmd: "/usr/bin/borg --remote-path=borg1" + +backup_postgres_dir: /root/backup-postgres +backup_mysql_dir: /root/backup-mysql +backup_mysql_defaults: /root/.backup-my.cnf diff --git a/roles/borg_client/tasks/main.yml b/roles/borg_client/tasks/main.yml index 13767a9af7f1c447eb866f105e60ad34a0aef050..6311f9893bcc825ce54b601d222c2d789fc4ebea 100644 --- a/roles/borg_client/tasks/main.yml +++ b/roles/borg_client/tasks/main.yml @@ -27,31 +27,26 @@ template: src=borg-backup.sh.j2 dest=/usr/local/bin/borg-backup{{ item['suffix'] }}.sh owner=root group=root mode=0755 loop: "{{ backup_hosts }}" -- name: Install postgres backup script - template: src=backup-postgres.sh.j2 dest=/usr/local/bin/backup-postgres.sh owner=root group=root mode=0755 - when: postgres_backup_dir is defined - -- name: Check whether postgres user exists - command: getent passwd postgres - register: check_postgres_user - ignore_errors: true - changed_when: check_postgres_user.stdout | length > 0 - -- name: Make postgres backup directory - file: path={{ postgres_backup_dir }} owner=root group=root mode=0755 state=directory - when: check_postgres_user is succeeded and postgres_backup_dir is defined - -- name: Install mysql backup script - template: src=backup-mysql.sh.j2 dest=/usr/local/bin/backup-mysql.sh owner=root group=root mode=0755 - when: mysql_backup_dir is defined - -- name: Install mysql backup config - template: src=backup-my.cnf.j2 dest={{ mysql_backup_defaults }} owner=root group=root mode=0644 - when: mysql_backup_defaults is defined - -- name: Create mysql backup directory - file: path={{ mysql_backup_dir }} state=directory owner=root group=root mode=0755 - when: mysql_backup_dir is defined +- name: Set up backup helpers for PostgreSQL databases + when: "'postgresql_servers' in group_names" + block: + - name: Install postgres backup script + template: src=backup-postgres.sh.j2 dest=/usr/local/bin/backup-postgres.sh owner=root group=root mode=0755 + + - name: Make postgres backup directory + file: path={{ backup_postgres_dir }} owner=root group=root mode=0755 state=directory + +- name: Set up backup helpers for MariaDB databases + when: "'mysql_servers' in group_names" + block: + - name: Install mysql backup script + template: src=backup-mysql.sh.j2 dest=/usr/local/bin/backup-mysql.sh owner=root group=root mode=0755 + + - name: Install mysql backup config + template: src=backup-my.cnf.j2 dest={{ backup_mysql_defaults }} owner=root group=root mode=0644 + + - name: Create mysql backup directory + file: path={{ backup_mysql_dir }} state=directory owner=root group=root mode=0755 - name: Install systemd services for backup template: src={{ item }}.j2 dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644 diff --git a/roles/borg_client/templates/backup-mysql.sh.j2 b/roles/borg_client/templates/backup-mysql.sh.j2 index 84cd957d8074bc7221a1d0c92955af68f7e18804..f46741c09430609f5fa936556da6e7088394ef67 100644 --- a/roles/borg_client/templates/backup-mysql.sh.j2 +++ b/roles/borg_client/templates/backup-mysql.sh.j2 @@ -2,8 +2,8 @@ set -e -mysql_opts="--defaults-file={{mysql_backup_defaults}}" -backupdir="{{mysql_backup_dir}}" +mysql_opts="--defaults-file={{ backup_mysql_defaults }}" +backupdir="{{ backup_mysql_dir }}" [[ ! -d "$backupdir" ]] && mkdir -p "$backupdir" rm -rf "${backupdir:?}"/* diff --git a/roles/borg_client/templates/backup-postgres.sh.j2 b/roles/borg_client/templates/backup-postgres.sh.j2 index a87e2ad2d2984ec4514c7c54fbf8c2e8b406d26f..1896b493797aa3ad54972adef166549bbaffef22 100644 --- a/roles/borg_client/templates/backup-postgres.sh.j2 +++ b/roles/borg_client/templates/backup-postgres.sh.j2 @@ -11,9 +11,9 @@ for db in "${DBLIST[@]}"; do if [[ $db =~ template[01] ]]; then continue; fi - echo "Dumping $db to {{ postgres_backup_dir }}"; - sudo -u postgres pg_dump --serializable-deferrable -Fc "$db" > "{{ postgres_backup_dir }}/$db.dump" + echo "Dumping $db to {{ backup_postgres_dir }}"; + sudo -u postgres pg_dump --serializable-deferrable -Fc "$db" > "{{ backup_postgres_dir }}/$db.dump" done -echo "Dumping globals to {{ postgres_backup_dir }}" -sudo -u postgres pg_dumpall --globals-only > "{{ postgres_backup_dir }}/globals.sql.dump" +echo "Dumping globals to {{ backup_postgres_dir }}" +sudo -u postgres pg_dumpall --globals-only > "{{ backup_postgres_dir }}/globals.sql.dump" diff --git a/roles/mariadb/defaults/main.yml b/roles/mariadb/defaults/main.yml index d217078023e5da8c412df85351fd607b3994d70b..7eff71afb68014d6972a05141bf3f2686bad1afe 100644 --- a/roles/mariadb/defaults/main.yml +++ b/roles/mariadb/defaults/main.yml @@ -23,6 +23,3 @@ mariadb_innodb_flush_log_at_trx_commit: '1' mariadb_innodb_stats_sample_pages: '32' mariadb_innodb_thread_concurrency: '8' mariadb_innodb_file_per_table: true - -mysql_backup_dir: '/root/backup-mysql' -mysql_backup_defaults: '/root/.backup-my.cnf' diff --git a/roles/postgres/defaults/main.yml b/roles/postgres/defaults/main.yml index ed428268828f6548f523ce2959a51ec04f74a0a2..e8933269e6f0a8a9bcb0c0d6f26e4bc0c8545519 100644 --- a/roles/postgres/defaults/main.yml +++ b/roles/postgres/defaults/main.yml @@ -18,5 +18,3 @@ postgres_hosts4: [] postgres_hosts6: [] postgres_ssl_hosts4: [] postgres_ssl_hosts6: [] - -postgres_backup_dir: '/root/backup-postgres'