{"id":1281,"date":"2022-11-16T09:38:05","date_gmt":"2022-11-16T08:38:05","guid":{"rendered":"https:\/\/www.delixirpro.com\/blog\/?p=1281"},"modified":"2022-12-17T11:36:54","modified_gmt":"2022-12-17T10:36:54","slug":"script-de-sauvegarde-des-bases-de-donnees-mysql","status":"publish","type":"post","link":"https:\/\/www.delixirpro.com\/blog\/2022\/11\/16\/script-de-sauvegarde-des-bases-de-donnees-mysql\/","title":{"rendered":"Script de sauvegarde des bases de donn\u00e9es MySQL"},"content":{"rendered":"\n<p>Sauvegarder le script suivant (ex: backup_mysql.sh) dans un dossier puis positionner les droits d&rsquo;execution dessus (0755).<\/p>\n\n\n\n<p>Planifier une t\u00e2che CRON \u00e0 l&rsquo;intervalle souhait\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le script<\/h2>\n\n\n\n<p>Le script va fonctionner ainsi :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Lister toutes les bases de donn\u00e9es sauf les bases syst\u00e8mes (database, infomation_schema, etc&#8230;)<\/li>\n\n\n\n<li>Pour chaque base, executer un dump SQL comprenant les routines et les d\u00e9clencheurs et gzip chaque fichier<\/li>\n\n\n\n<li>Finalement, nettoyer les anciennes sauvegardes<\/li>\n<\/ol>\n\n\n\n<p>Le script cr\u00e9\u00e9 1 dossier de sauvegarde par jour. A l&rsquo;issue de la sauvegarde, il y a 1 fichier \u00ab\u00a0.gz\u00a0\u00bb par base :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"759\" height=\"277\" src=\"https:\/\/www.delixirpro.com\/blog\/wp-content\/uploads\/2022\/11\/image.png\" alt=\"\" class=\"wp-image-1285\" srcset=\"https:\/\/www.delixirpro.com\/blog\/wp-content\/uploads\/2022\/11\/image.png 759w, https:\/\/www.delixirpro.com\/blog\/wp-content\/uploads\/2022\/11\/image-300x109.png 300w\" sizes=\"auto, (max-width: 759px) 100vw, 759px\" \/><\/figure>\n\n\n\n<p><em>Si vous d\u00e9cidez d&rsquo;executer la sauvegarde plusieurs fois par jours, les sauvegardes pr\u00e9c\u00e9dentes de la m\u00eame journ\u00e9e seront \u00e9cras\u00e9es.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#! \/bin\/bash\n \nTIMESTAMP=$(date +\"%F\")\nBASE_DIR=\/home\/sdb\/backup_mysql\nBACKUP_DIR=\"$BASE_DIR\/$TIMESTAMP\"\nMYSQL_USER=\"root\"\nMYSQL=\/usr\/bin\/mysql\nMYSQL_PASSWORD='&lt;__MON_MOT_DE_PASSE__&gt;'\nMYSQLDUMP=\/usr\/bin\/mysqldump\n \nmkdir -p \"$BACKUP_DIR\"\n \ndatabases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e \"SHOW DATABASES;\" | grep -Ev \"(Database|information_schema|performance_schema)\"`\n \nfor db in $databases; do\n  $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases --routines --triggers $db | gzip &gt; \"$BACKUP_DIR\/$db@$TIMESTAMP.gz\"\ndone\n\nfind $BASE_DIR\/* -type d -ctime +30 -exec rm -rf {} \\;<\/pre>\n\n\n\n<p>Vous pouvez r\u00e9gler :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BASE_DIR = chemin de destination des sauvegardes<\/li>\n\n\n\n<li>MYSQL_USER = votre utilisateur mysql disposant de droits suffisants pour acc\u00e9der aux bases de donn\u00e9es<\/li>\n\n\n\n<li>MYSQL = chemin d&rsquo;acc\u00e8s au binaire mysql<\/li>\n\n\n\n<li>MYSQL_PASSWORD = mot de passe correspondant \u00e0 MYSQL_USER<\/li>\n\n\n\n<li>MYSQLDUMP = chemin d&rsquo;acc\u00e8s au binaire \u00ab\u00a0mysqldump\u00a0\u00bb<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conservation de l&rsquo;ant\u00e9riorit\u00e9 des sauvegardes<\/h2>\n\n\n\n<p>Les sauvegardes sont nettoy\u00e9es au bout de 30 jours gr\u00e0ce \u00e0 cette commande :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find $BASE_DIR\/* -type d -ctime +30 -exec rm -rf {} \\;<\/pre>\n\n\n\n<p>Changer simplement la valeur \u00ab\u00a0+30\u00a0\u00bb par le temps de conservation maximum.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Planifier la t\u00e2che<\/h2>\n\n\n\n<p>Exemple, pour planifier le lancement du script tous les jours \u00e0 1h :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0 1 * * * \/path_to\/backup_mysql.sh<\/pre>\n\n\n\n<p><em>N&rsquo;oubliez pas que le script doit \u00eatre executable (droits 0755) !<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sauvegarder le script suivant (ex: backup_mysql.sh) dans un dossier puis positionner les droits d&rsquo;execution dessus (0755). Planifier une t\u00e2che CRON \u00e0 l&rsquo;intervalle souhait\u00e9. Le script Le script va fonctionner ainsi : Le script cr\u00e9\u00e9&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":175,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,8],"tags":[115,116,117],"class_list":["post-1281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sauvegarde","category-tech-tips","tag-mysql","tag-mysqldump","tag-sauvegarde-sql"],"_links":{"self":[{"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/posts\/1281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/comments?post=1281"}],"version-history":[{"count":5,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/posts\/1281\/revisions"}],"predecessor-version":[{"id":1336,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/posts\/1281\/revisions\/1336"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/media\/175"}],"wp:attachment":[{"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/media?parent=1281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/categories?post=1281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delixirpro.com\/blog\/wp-json\/wp\/v2\/tags?post=1281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}