{"id":11162,"date":"2012-04-06T14:31:42","date_gmt":"2012-04-06T12:31:42","guid":{"rendered":"https:\/\/www.saasweb.agency\/blog\/comment-generer-automatiquement-des-dumps-mysql-chiffres\/"},"modified":"2026-10-27T13:29:50","modified_gmt":"2026-10-27T12:29:50","slug":"comment-generer-automatiquement-des-dumps-mysql-chiffres","status":"publish","type":"post","link":"https:\/\/www.saasweb.agency\/fr\/blog\/comment-generer-automatiquement-des-dumps-mysql-chiffres\/","title":{"rendered":"Comment g\u00e9n\u00e9rer automatiquement des dumps MySQL chiffr\u00e9s ?"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.saasweb.agency\/wp-content\/uploads\/2012\/04\/logo-mysql-110x57-1.png\" alt=\"\" title=\"logo-mysql-110x57\" width=\"110\" height=\"57\" class=\"alignleft size-full wp-image-975\" srcset=\"https:\/\/www.saasweb.agency\/wp-content\/uploads\/2012\/04\/logo-mysql-110x57-1.png 110w, https:\/\/www.saasweb.agency\/wp-content\/uploads\/2012\/04\/logo-mysql-110x57-1-50x26.png 50w, https:\/\/www.saasweb.agency\/wp-content\/uploads\/2012\/04\/logo-mysql-110x57-1-100x52.png 100w\" sizes=\"(max-width: 110px) 100vw, 110px\" \/>Tout le monde sait que les sauvegardes sont importantes, qu&rsquo;il s&rsquo;agisse d&rsquo;une panne de syst\u00e8me ou simplement de vouloir revenir \u00e0 un \u00e9tat ant\u00e9rieur suite \u00e0 une erreur.<br \/>\nSouvent, les sauvegardes sont effectu\u00e9es par des t\u00e2ches Cron. Dans la plupart des cas, cependant, un simple dump MySQL est g\u00e9n\u00e9r\u00e9 sans que le contenu ne soit chiffr\u00e9.<br \/>\nDans cet article, je d\u00e9cris comment cr\u00e9er des sauvegardes \u00e0 l&rsquo;aide de GPG sans utiliser de mot de passe fixe. Comme il peut y avoir plusieurs administrateurs de base de donn\u00e9es capables de restaurer les sauvegardes, chaque administrateur autoris\u00e9 doit pouvoir restaurer la sauvegarde avec sa propre phrase secr\u00e8te. <\/p>\n<div class=\"code-snippet\">\n#!\/bin\/bash<\/p>\n<p>BACKUP_DIR=\/var\/backup\/auto\/mysql<br \/>\nDATE=$(date -I)<br \/>\nTARGET_DIR=$BACKUP_DIR\/$DATE<br \/>\nmkdir -p $TARGET_DIR<\/p>\n<p>DATABASES=$(mysql -uadmin -B -s -e\u00a0\u00bbshow databases;\u00a0\u00bb)<\/p>\n<p>for db in $DATABASES; do<br \/>\nTARGET=$TARGET_DIR\/$db.sql.gz.gpg<br \/>\necho -n dumping $db to $TARGET &#8230;<br \/>\nmysqldump -uadmin $db | gzip | gpg -rCAFEBABE -rAFFE4711 -rAFFEFACE -e &#8211; &gt; $TARGET<br \/>\nif [ $PIPESTATUS -eq 0 ]; then echo OK; else echo ERROR; fi<br \/>\ndone\n<\/p><\/div>\n<p>La variable <code>BACKUP_DIR<\/code> indique l&rsquo;endroit o\u00f9 les sauvegardes doivent \u00eatre stock\u00e9es. Un r\u00e9pertoire avec la date au format AAAA-MM-JJ (<code>date -I<\/code>) est cr\u00e9\u00e9 en dessous, dans lequel les dumps des diff\u00e9rentes bases de donn\u00e9es sont d\u00e9pos\u00e9s. Si tu souhaites g\u00e9n\u00e9rer plus d&rsquo;une sauvegarde par jour, tu peux adapter cette commande.  <\/p>\n<p>Exemple de sortie :<\/p>\n<div class=\"code-snippet\">&#8230;<br \/>\ndumping mysql to \/var\/backup\/auto\/mysql\/2012-04-06\/mysql.sql.gz.gpg &#8230;OK<br \/>\ndumping test to \/var\/backup\/auto\/mysql\/2012-04-06\/test.sql.gz.gpg &#8230;OK<br \/>\n&#8230;<\/div>\n<p>Ce qu&rsquo;il faut adapter dans ce script, ce sont les cl\u00e9s\/ID des destinataires, c&rsquo;est-\u00e0-dire les personnes autoris\u00e9es \u00e0 d\u00e9chiffrer les donn\u00e9es ult\u00e9rieurement. Dans cet exemple, trois destinataires sont indiqu\u00e9s : <\/p>\n<div class=\"code-snippet\">\ngpg -rCAFEBABE -rAFFE4711 -rAFFEFACE\n<\/div>\n<p>Chaque destinataire a la possibilit\u00e9 de d\u00e9chiffrer les fichiers de sauvegarde. GPG d\u00e9termine automatiquement la cl\u00e9 pour le \u00ab d\u00e9chiffreur \u00bb : <\/p>\n<div class=\"code-snippet\">\ngpg -d mysql\/2012-04-06\/test.sql.gz.gpg | gunzip | head -n 5<\/p>\n<p>You need a passphrase to unlock the secret key for<br \/>\nuser: \u00ab\u00a0XZY\u00a0\u00bb<br \/>\n2048-bit ELG-E key, ID AFFEFACE, created&#8230;<br \/>\nEnter passphrase:<\/p>\n<p>gpg: encrypted with 2048-bit RSA key, ID CAFEBABE&#8230;<br \/>\ngpg: encrypted with 2048-bit ELG-E key, ID AFFE4711&#8230;<br \/>\ngpg: encrypted with 2048-bit ELG-E key, ID AFFEFACE&#8230;\n<\/p><\/div>\n<p>La sortie r\u00e9elle appara\u00eet alors dans STDOUT :<\/p>\n<div class=\"code-snippet\"><code>-- MySQL dump 10.13  Distrib 5.1.56, for redhat-linux-gnu (x86_64)<br \/>\n--<br \/>\n-- Host: localhost    Database: test<br \/>\n-- ------------------------------------------------------<br \/>\n-- Server version       5.1.56<br \/>\n<\/code><\/div>\n<p>Si tu n&rsquo;as pas encore beaucoup manipul\u00e9 GnuPG et l&rsquo;interface en ligne de commande MySQL, tu devrais tenir compte des points suivants avant d&rsquo;ex\u00e9cuter l&rsquo;exemple :<br \/>\n&#8211; Les cl\u00e9s de tous les destinataires doivent \u00eatre sign\u00e9es\/approuv\u00e9es au pr\u00e9alable afin que le script de sauvegarde ne passe pas en mode interactif.<br \/>\n&#8211; Le mot de passe pour l&rsquo;acc\u00e8s \u00e0 la base de donn\u00e9es est d\u00e9fini par d\u00e9faut dans le fichier ~\/.my.cnf dans la section [client].<\/p>\n<p>Bonne chance pour les tests et l&rsquo;int\u00e9gration.<br \/>\nC.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tout le monde sait que les sauvegardes sont importantes, qu&rsquo;il s&rsquo;agisse d&rsquo;une panne de syst\u00e8me ou simplement de vouloir revenir \u00e0 un \u00e9tat ant\u00e9rieur suite \u00e0 une erreur. Souvent, les sauvegardes sont effectu\u00e9es par des t\u00e2ches Cron. Dans la plupart des cas, cependant, un simple dump MySQL est g\u00e9n\u00e9r\u00e9 sans que le contenu ne soit \u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[924,816],"tags":[991,1277,1953,1436,1041,2063,1417,1066,1114,1037,1734],"class_list":["post-11162","post","type-post","status-publish","format-standard","hentry","category-programmation","category-tutoriel","tag-administration","tag-base-de-donnees","tag-chiffrement","tag-chiffrer-mysqldump","tag-gpg","tag-mysql","tag-mysqldump","tag-sauvegarde","tag-sauvegarde-2","tag-securite","tag-vidage"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/comments?post=11162"}],"version-history":[{"count":1,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11162\/revisions"}],"predecessor-version":[{"id":11847,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/posts\/11162\/revisions\/11847"}],"wp:attachment":[{"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/media?parent=11162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/categories?post=11162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.saasweb.agency\/fr\/wp-json\/wp\/v2\/tags?post=11162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}