memiah.mysql-s3-backup
MySQL S3 Backup
Eine Ansible-Rolle, die die Amazon AWS-Befehlszeilenschnittstelle installiert und ein Bash-Skript konfiguriert, um einzelne MySQL-Datenbank-Backups auf Amazon S3 hochzuladen.
Anforderungen
Die Rolle setzt voraus, dass MySQL bereits installiert ist.
Wenn GPG aktiviert ist, müssen Sie diese Anmeldeinformationen auch erstellt haben.
Es wird empfohlen, einen Benutzer mit eingeschränkten Berechtigungen zu erstellen. Unten finden Sie eine Richtlinie mit dem Namen AmazonS3CreateReadWriteAccess-[bucket-name]
, die verwendet werden kann, um eingeschränkten (erstellen/listen/hochladen) Zugriff auf den Bucket [bucket-name]
bereitzustellen.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "s3:CreateBucket", "s3:ListBucket" ],
"Resource": [ "arn:aws:s3:::[bucket-name]" ]
},
{
"Effect": "Allow",
"Action": [ "s3:PutObject" ],
"Resource": [ "arn:aws:s3:::[bucket-name]/*" ]
}
]
}
Zusätzlich sollten Sie in Betracht ziehen, die Versionierung und Lebenszyklen des Buckets in S3 zu berücksichtigen.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit den Standardwerten (siehe defaults/main.yml
):
mysql_backup_name: "mysql-s3-backup"
Name zur Identifizierung dieser Rolle, verwendet für das Standardverzeichnis, die Dateinamen und das AWS-Profil.
mysql_backup_dir: "/opt/{{ mysql_backup_name }}"
Verzeichnis, in dem das Backup-Skript und die Konfiguration gespeichert werden.
mysql_backup_cronfile: "{{ mysql_backup_name }}"
mysql_backup_cron_enabled: true
mysql_backup_cron_hour: 23
mysql_backup_cron_minute: 0
mysql_backup_cron_email: false
Cron ist aktiviert und auf 23:00 Uhr jeden Tag eingestellt, ohne dass eine E-Mail an einen Empfänger gesendet wird. Wenn Sie die Ausgabe per E-Mail erhalten möchten, setzen Sie dies auf die E-Mail-Adresse des Empfängers.
mysql_backup_aws_profile: "{{ mysql_backup_name }}"
Um eine Trennung zu schaffen, erstellen wir ein neues AWS-Profil für diesen Skriptkontext, Sie könnten dies auf "default"
setzen, um Profile zu ignorieren.
mysql_backup_aws_access_key: "[accesss-key]"
Ihr Amazon AWS-Zugangs-Schlüssel.
mysql_backup_aws_secret_key: "[secret-key]"
Ihr Amazon AWS-Geheimschlüssel.
mysql_backup_aws_region: eu-west-1
Der Regionsname, in dem sich der S3-Bucket befindet.
mysql_backup_aws_format: text
Ausgabeformat von der AWS CLI.
mysql_backup_gpg_secret_key: False
GPG-Geheimschlüssel, mit dem die Backups verschlüsselt werden.
mysql_backup_gpg_secret_dest: "~/{{ mysql_backup_name }}-gpg.asc"
Ort zum Speichern des GPG-Geheimschlüssels.
mysql_backup_system_user: root
Benutzer, der das Backup-Skript sowie den Cron-Job besitzt und ausführt.
mysql_backup_config: []
Anpassungen am Backup-Skript selbst (Werte verwenden Bash-Syntax).
timestamp: "$(date +"%Y-%m-%d_%H%M")"
Datum und Uhrzeit zum Erstellen von Backup-Verzeichnissen "YYYY-MM-DD_HHII".backup_dir: "/tmp/mysql-s3-backups/${timestamp}"
Lokaler Backup-Verzeichnispfad zum Speichern von Dateien vor dem Upload.backup_dir_remove: "true"
Lokales Backup-Verzeichnis nach Abschluss des Skripts entfernen.aws_bucket: "mysql-s3-backups"
Standardname des AWS S3-Buckets.aws_dir: "$timestamp"
Standardverzeichnis in AWS zum Speichern der Backups.aws_extra_arguments: "--endpoint https://s3-compatable-endpoint.example.com"
Zusätzliche Argumente, die an die AWS CLI übergeben werden.aws_enabled: "true"
Hochladen zu Amazon S3 aktivieren, wenn falsch, wird die Option "backup_dir_remove" auf falsch gesetzt.aws_profile: "mysql-s3-backup"
Das zu verwendende AWS-Profil festlegen (~/.aws/credentials und ~/.aws/config).mysql_slave: "false"
Auf wahr setzen, wenn von einem MySQL-Slave-Server gesichert wird; dies stoppt den Slave und startet ihn wieder, wenn das Skript abgeschlossen ist.mysql_using_rds: "false"
Auf wahr setzen, wenn von einer RDS-Lese-Replikat gesichert wird; dies stellt sicher, dass wir die Funktionen mysql.rds_stop_replication und mysql.rds_start_replication verwenden, anstelle der Standardbefehle STOP / START SLAVE (die nicht die erforderlichen Berechtigungen auf RDS haben).mysql_use_defaults_file: "true"
Standard-MySQL-Konfigurationsdatei verwenden.mysql_defaults_file: ""
Genauer die Standarddatei-Standort festlegen, z. B. "/etc/my.cnf".mysql_user: ""
,mysql_password: ""
,mysql_host: ""
Wenn mysql_use_defaults_file falsch ist, wird versucht, diese Parameter zu verwenden, um eine Verbindung zu MySQL herzustellen.mysql_exclude: "information_schema|performance_schema|mysql|sys"
Liste der Datenbanken, die vom Export ausgeschlossen werden sollen, dies ist eine durch Pipes getrennte Liste (RegEx).mysqldump_args: "--triggers --routines --force --opt --add-drop-database"
Standardflags, die für den Datenbankdump verwendet werden.gpg_enabled: "false"
Wenn wahr, werden Backups mit GPG verschlüsselt und die Endung ".gpg" wird zu jeder der Backup-Dateien hinzugefügt.gpg_args: "--encrypt --batch --trust-model always"
Standardflags, die für die GPG-Verschlüsselung verwendet werden.gpg_recipient: ""
Empfänger der mit dem öffentlichen Schlüssel verschlüsselten Dateien.gpg_sign: "false"
Flag zur Durchsetzung der Signierung der Backups.gpg_signer: ""
Standard-GPG-Schlüssel, mit dem signiert wird.
Abhängigkeiten
Beispiel-Playbook
- hosts: mysql-servers
vars_files:
- vars/main.yml
roles:
- memiah.mysql-s3-backup
Innerhalb von vars/main.yml
:
mysql_backup_aws_access_key: "access_key_here"
mysql_backup_aws_secret_key: "secret_key_here"
mysql_backup_aws_region: eu-west-1
mysql_backup_config:
aws_profile: "{{ mysql_backup_aws_profile }}"
aws_bucket: "bucket_name_here"
backup_dir: "{{ mysql_backup_dir }}/backups/${timestamp}"
Lizenz
MIT / BSD
Autor-Information
Diese Rolle wurde 2016 von Memiah Limited erstellt.
ansible-galaxy install memiah.mysql-s3-backup