freehck.script_mysql_backup

freehck.script_mysql_backup

Ce rôle crée un script qui effectue des sauvegardes MySQL.

Il sauvegarde la base de données, peut éventuellement compresser et chiffrer la sauvegarde avec aes256.

Il peut envoyer des messages dans slack.

Il peut stocker votre sauvegarde sur S3 ou/et la copier vers un autre hôte via scp.

Variables du Rôle

Variables de base

mysql_backup_host: hôte MySQL

mysql_backup_port: port MySQL (par défaut 3306)

mysql_backup_user: utilisateur MySQL

mysql_backup_pass: mot de passe MySQL

mysql_backup_db: base de données MySQL à sauvegarder (si non défini, l'option --all-databases sera passée à mysqldump)

mysql_backup_backend_use_s3: à mettre sur vrai si vous souhaitez stocker votre sauvegarde sur S3

mysql_backup_backend_use_scp: à mettre sur vrai si vous souhaitez envoyer votre sauvegarde vers un autre hôte via scp

Variables de backend S3

mysql_backup_s3cfg_template: modèle de votre configuration s3fs (le défaut est fourni, ne vous inquiétez pas)

mysql_backup_s3: options de configuration S3 dans ce format

mysql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "nom-du-bucket"
Variables de backend SCP

mysql_backup_scp_host: hôte de stockage pour copier votre sauvegarde

mysql_backup_scp_user: utilisateur pour se connecter à l'hôte de stockage

mysql_backup_scp_dst: chemin sur l'hôte de stockage pour stocker votre sauvegarde

mysql_backup_scp_identity_src: fichier d'identité à utiliser pour se connecter à l'hôte de stockage (oui, cela doit être une clé privée)

Nommage

mysql_backup_archive_prefix: juste le nom de la sauvegarde ou simplement tout ce qui précède l'horodatage

mysql_backup_archive_stamp: modèle d'horodatage au format de l'outil date (le défaut est %F-%Hh%Mm%Ss, ce qui donne des horodatages comme 2019-09-23-12h22m07s)

mysql_backup_script_name: si vous souhaitez renommer le script principal, vous êtes libre de le faire

mysql_backup_custom_script_name: si vous souhaitez attribuer un nom spécifique au script de job qui effectue la sauvegarde. Le défaut est mysql-backup-<nom_database>.sh, où peut être all si aucune base de données n'est spécifiée pour sauvegarde.

mysql_backup_scp_identity_name: le défaut est id_rsa, mais il peut être utile de le modifier si vous avez plusieurs backends SCP utilisant différentes clés

mysql_backup_encrypt_aes_key_name: le défaut est aes256.key, nécessaire si vous voulez des clés de chiffrement différentes pour différentes tâches de sauvegarde

Notifications

mysql_backup_warn_size: en GiB, défaut est 0. Comparez votre sauvegarde à cette taille. Si votre sauvegarde est inférieure, vous en serez averti.

mysql_backup_hostname: nom d'hôte (qui sera affiché dans les messages slack)

mysql_backup_slack_webhook: comme indiqué, c'est un webhook slack ; définissez-le pour recevoir des notifications slack

Comment obtenir un webhook slack : https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Variables de compression et de chiffrement

mysql_backup_gzip: fichier de sauvegarde gzip

mysql_backup_encrypt_aes: chiffrer le fichier de sauvegarde (si gzip est activé, cette action sera effectuée précisément APRÈS gzip)

mysql_backup_encrypt_aes_key_src: clé aes256 pour chiffrer votre sauvegarde

La clé aes256 est juste 32 octets aléatoires.

Vous pouvez utiliser la commande suivante pour la créer : dd if=/dev/urandom of=aes256.key count=1 bs=32.

Si vous préférez des mots de passe en chaîne (moins sécurisé), vous pouvez utiliser ceci : pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Répertoires

mysql_backup_script_dir: répertoire pour stocker le script principal

mysql_backup_custom_script_dir: répertoire pour stocker des scripts spécifiques aux jobs de sauvegarde appropriés

mysql_backup_conf_dir: répertoire pour stocker les fichiers de configuration des scripts de sauvegarde

mysql_backup_encrypt_aes_key_dir: répertoire pour stocker la clé de chiffrement aes256

mysql_backup_tmpdir: répertoire pour conserver les résultats temporaires (vous n’avez pas besoin d'en créer un séparément, c'est /tmp par défaut)

Passer des données en dehors du rôle

mysql_backup_save_facts_about_custom_script: si vous le mettez à vrai, le rôle enregistrera le chemin complet du script de job généré, qui doit être exécuté pour effectuer la sauvegarde, dans la variable mysql_backup_last_generated_custom_script. Vous pouvez utiliser cette variable pour ajouter une tâche cron spécifique pour ce script.

Exemple de Playbook

# créer un script de job pour la sauvegarde MySQL
- role: freehck.script_mysql_backup
  # paramètres de connexion MySQL
  mysql_backup_host: "{{ db_host }}"
  mysql_backup_user: "{{ db_user }}"
  mysql_backup_pass: "{{ db_pass }}"
  mysql_backup_db: "{{ db_name }}"
  # paramètres de stockage backend
  mysql_backup_backend_use_s3: non
  mysql_backup_backend_use_scp: oui
  mysql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  mysql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  mysql_backup_scp_user: 'file'
  mysql_backup_scp_dst: '/var/www/file/public/mysql-db-prod-backup'
  # gzip et chiffrer
  mysql_backup_gzip: oui
  mysql_backup_encrypt_aes: oui
  mysql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # autres
  mysql_backup_save_facts_about_custom_script: oui
  mysql_backup_logfile: "/var/log/mysql-backup.log"
  tags: [ backup, mysql ]

# il est raisonnable de créer la tâche cron pour ce script de job
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "sauvegarder la base de données"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ mysql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, mysql ]

Informations Importantes

Après avoir déployé le script de sauvegarde MySQL sur votre hôte, il serait judicieux de vous rendre sur l'hôte qui effectue les tâches de sauvegarde et d'exécuter le script de job depuis /opt/scripts sans paramètres. Si ça passe sans erreurs et que vous voyez le fichier de sauvegarde sur le stockage, alors tout va bien. Sinon, vous découvrirez quel était le problème. Par exemple, vous pourriez avoir oublié d'ajouter l'hôte de stockage dans known_hosts lors de la configuration des utilisateurs. Ou votre modèle s3cfg pourrait contenir une erreur. N'oubliez pas de tout vérifier deux fois : sauvegarder est une tâche très importante.

Après avoir vérifié que la sauvegarde a été créée et stockée au bon endroit, vérifiez-la soigneusement. Vous devez être sûr de pouvoir la restaurer.

Licence

MIT

Informations sur l'Auteur

Dmitrii Kashin, freehck@freehck.ru

À propos du projet

install a script performing mysql backups

Installer
ansible-galaxy install freehck.script_mysql_backup
Licence
mit
Téléchargements
1.2k
Propriétaire