freehck.script_psql_backup

freehck.script_psql_backup

Diese Rolle erstellt ein Skript, das psql-Backups durchführt.

Es sichert die Datenbank, möglicherweise mit gzip und verschlüsselt das Backup mit aes256.

Es kann Nachrichten an Slack senden.

Es kann dein Backup auf S3 speichern oder es per SCP an einen anderen Host übertragen.

Rollenvariablen

Basisvariablen

psql_backup_host: psql-Host

psql_backup_port: psql-Port (Standard 3306)

psql_backup_user: psql-Benutzer

psql_backup_pass: psql-Passwort

psql_backup_db: psql-Datenbank, die gesichert werden soll (wenn nicht gesetzt, wird die Option --all-databases an psqldump übergeben)

psql_backup_backend_use_s3: auf true setzen, wenn du dein Backup auf S3 speichern möchtest

psql_backup_backend_use_scp: auf true setzen, wenn du dein Backup per SCP an einen anderen Host senden möchtest

S3-Backend-Variablen

psql_backup_s3cfg_template: Vorlage für deine s3fs-Konfiguration (die Standardvorlage ist bereitgestellt, keine Sorge)

psql_backup_s3: s3-Konfigurationsoptionen im folgenden Format

psql_backup_s3:
  benutzername: "s3user"
  zugriffs_key: "s3user-akey"
  geheim_key: "s3user-skey"
  bucket: "bucket-name"
SCP-Backend-Variablen

psql_backup_scp_host: Speicher-Host, um dein Backup zu kopieren

psql_backup_scp_user: Benutzer, um sich auf dem Speicher-Host anzumelden

psql_backup_scp_dst: Pfad auf dem Speicher-Host für dein Backup

psql_backup_scp_identity_src: Identitätsdatei zur Anmeldung auf dem Speicher-Host (ja, es sollte ein privater Schlüssel sein)

Benennung

psql_backup_archive_prefix: einfach der Backup-Name oder alles vor dem Zeitstempel

psql_backup_archive_stamp: Zeitstempelvorlage im Format des date-Tools (der Standard ist %F-%Hh%Mm%Ss, was zu Zeitstempeln wie 2019-09-23-12h22m07s führt)

psql_backup_script_name: wenn du das Basisskript umbenennen möchtest, kannst du das tun

psql_backup_custom_script_name: wenn du einen bestimmten Namen für das Job-Skript festlegen möchtest, das tatsächlich das Backup durchführt. Der Standard ist psql-backup-<database_name>.sh, wobei all sein kann, wenn keine Datenbanken zum Backup angegeben wurden.

psql_backup_scp_identity_name: der Standard ist id_rsa, aber es könnte nützlich sein, ihn zu ändern, falls du mehrere SCP-Backends mit unterschiedlichen Schlüsseln haben möchtest

psql_backup_encrypt_aes_key_name: der Standard ist aes256.key, notwendig, wenn du unterschiedliche Verschlüsselungsschlüssel für verschiedene Backup-Aufgaben haben möchtest

Benachrichtigungen

psql_backup_warn_size: in GiB, Standard ist 0. Vergleiche dein Backup mit dieser Größe. Wenn dein Backup kleiner ist, wirst du darüber gewarnt.

psql_backup_hostname: Hostname (der in Slack-Nachrichten angezeigt wird)

psql_backup_slack_webhook: wie geschrieben, es ist ein Slack-Webhook; setze ihn, um Slack-Benachrichtigungen zu erhalten

So erhältst du einen Slack-Webhook: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Komprimierungs- und Verschlüsselungsvariablen

psql_backup_gzip: gzip-Backup-Datei

psql_backup_encrypt_aes: verschlüsselt die Backup-Datei (wenn gzip aktiviert ist, wird diese Aktion speziell NACH gzip durchgeführt)

psql_backup_encrypt_aes_key_src: aes256-Schlüssel zur Verschlüsselung deines Backups

Der Aes256-Schlüssel ist einfach 32 Bytes zufällig.

Du kannst den folgenden Befehl zur Erstellung verwenden: dd if=/dev/urandom of=aes256.key count=1 bs=32.

Wenn du Zeichenfolgen-Passwörter bevorzugst (weniger sicher), kannst du dies verwenden: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Verzeichnisse

psql_backup_script_dir: Verzeichnis zum Speichern des Basisskripts

psql_backup_custom_script_dir: Verzeichnis zum Speichern von Skripten, die zu den entsprechenden Backup-Jobs gehören

psql_backup_conf_dir: Verzeichnis zum Speichern von Konfigurationsdateien für das Backup-Skript

psql_backup_encrypt_aes_key_dir: Verzeichnis zum Speichern des aes256-Verschlüsselungsschlüssels

psql_backup_tmpdir: Verzeichnis, um temporäre Ergebnisse aufzubewahren (du musst kein separates erstellen, es ist standardmäßig /tmp)

Daten außerhalb der Rolle übergeben

psql_backup_save_facts_about_custom_script: wenn du es auf true setzt, speichert die Rolle den vollständigen Pfad des generierten Job-Skripts, das ausgeführt werden muss, um das Backup durchzuführen, in der Variablen psql_backup_last_generated_custom_script. Du kannst diese Variable verwenden, um einen spezifischen Cron-Task für dieses Skript hinzuzufügen.

Beispiel-Playbook

# psql-Backup-Job-Skript erstellen
- role: freehck.script_psql_backup
  # psql-Verbindungsparameter
  psql_backup_host: "{{ db_host }}"
  psql_backup_user: "{{ db_user }}"
  psql_backup_pass: "{{ db_pass }}"
  psql_backup_db: "{{ db_name }}"
  # Backend-Speicherparameter
  psql_backup_backend_use_s3: no
  psql_backup_backend_use_scp: yes
  psql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  psql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  psql_backup_scp_user: 'file'
  psql_backup_scp_dst: '/var/www/file/public/psql-db-prod-backup'
  # gzip und verschlüsseln
  psql_backup_gzip: yes
  psql_backup_encrypt_aes: yes
  psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # andere
  psql_backup_save_facts_about_custom_script: yes
  psql_backup_logfile: "/var/log/psql-backup.log"
  tags: [ backup, psql ]

# Es ist sinnvoll, für dieses Job-Skript einen Cron-Job zu erstellen
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "Datenbank sichern"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ psql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, psql ]

Wichtige Informationen

Nachdem du das psql-Backup-Skript auf deinem Host bereitgestellt hast, ist es sinnvoll, auf den Host zu gehen, der die Backup-Aufgaben durchführt, und das Job-Skript ohne Parameter aus /opt/scripts auszuführen. Wenn es ohne Fehler durchläuft und du die Backup-Datei im Speicher siehst, ist alles in Ordnung. Wenn nicht - wirst du herausfinden, wo das Problem lag. Zum Beispiel könntest du vergessen haben, den Speicher-Host zu known_hosts hinzuzufügen, als du die Benutzer konfiguriert hast. Oder deine s3cfg-Vorlage könnte einen Fehler enthalten. Vergiss nicht, alles zweimal zu überprüfen: Backups sind eine sehr wichtige Aufgabe.

Nachdem du überprüft hast, dass das Backup erstellt und am richtigen Ort gespeichert wurde, überprüfe es sorgfältig. Du musst sicher sein, dass du es mit diesem Backup wiederherstellen kannst.

Lizenz

MIT

Autorinformationen

Dmitrii Kashin, freehck@freehck.ru

Über das Projekt

install a script performing mysql backups

Installieren
ansible-galaxy install freehck.script_psql_backup
GitHub Repository
Lizenz
mit
Downloads
115
Besitzer