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ù 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
ansible-galaxy install freehck.script_mysql_backup