{"id":401,"date":"2015-11-14T21:36:59","date_gmt":"2015-11-14T20:36:59","guid":{"rendered":"http:\/\/snakenet.eu\/blog\/?p=401"},"modified":"2016-01-29T12:11:53","modified_gmt":"2016-01-29T11:11:53","slug":"faire-des-backups-cest-bien-les-tester-cest-mieux","status":"publish","type":"post","link":"https:\/\/snakenet.eu\/blog\/faire-des-backups-cest-bien-les-tester-cest-mieux\/401\/","title":{"rendered":"Faire des backups, c&rsquo;est bien. Les tester, c&rsquo;est mieux"},"content":{"rendered":"<p>Aujourd&rsquo;hui, j&rsquo;ai fait une connerie&#8230; J&rsquo;ai dropp\u00e9 tout le contenu de ma base de donn\u00e9e MySQL qui h\u00e9bergeait ce site.<\/p>\n<p>Bon, pas grave, j&rsquo;ai des backups (mis en place il y a 3 ans) et ils sont r\u00e9guli\u00e8rement recr\u00e9\u00e9s, tout va bien.<\/p>\n<p>Et bien non&#8230; Le script que j&rsquo;utilise (chopp\u00e9 sur le net) ne m&rsquo;encapsule pas les champs de type datetime entre quotes. R\u00e9sultat: impossible de charger le dump.<\/p>\n<p>J&rsquo;ai heureusement un petit \u00e9diteur de texte super intelligent <a href=\"http:\/\/www.contexteditor.org\" target=\"_blank\">ContextEditor<\/a> pour ne pas le citer qui me permet de faire de belles macro. 2 heures plus tard, j&rsquo;ai enfin un dump qui s&rsquo;importe. Ouf! plus de peur que de mal!<\/p>\n<p>J&rsquo;en ai profit\u00e9 pour corriger le script de backup, et SURTOUT, je l&rsquo;ai test\u00e9 (en d\u00e9truisant \u00e0 nouveau la DB, mais avec un backup de phpmyadmin et avec mon backup pr\u00e9c\u00e9dent).<\/p>\n<p>R\u00e9sultat : \u00e7a fonctionne. Et donc, j&rsquo;en profite pour vous le taper ci-dessous (bande de veinards).<\/p>\n<pre>&lt;?php\r\n$MYSQL_DB='MAdb';\r\n$MYSQL_USER='MONuser';\r\n$MYSQL_PWD='MONpassword';\r\n$MYSQL_SERVER='MonServeurLocal';\r\n$MYSQL_DUMP='.\/mysql_'.date('l').'.dump';\r\n\/\/ Exporting MYSQL\r\n$infos=dumpMySQL($MYSQL_SERVER,$MYSQL_USER,$MYSQL_PWD,$MYSQL_DB);\r\n$fichierDump = fopen($MYSQL_DUMP, \"wb\");\r\nfwrite($fichierDump, $infos[0]);\r\nfwrite($fichierDump, $infos[1]);\r\nfwrite($fichierDump, $infos[2]);\r\nfclose($fichierDump);\r\n\r\nfunction dumpMySQL($serveur, $login, $password, $base)\r\n{\r\n\u00a0\u00a0\u00a0 $connexion = mysql_connect($serveur, $login, $password);\r\n\u00a0\u00a0\u00a0 mysql_select_db($base, $connexion);\r\n\u00a0\u00a0\u00a0 $entete = \"-- ----------------------\\r\\n\";\r\n\u00a0\u00a0\u00a0 $entete .= \"-- dump de la base \".$base.\" au \".date(\"d-M-Y\").\"\\r\\n\";\r\n\u00a0\u00a0\u00a0 $entete .= \"-- ----------------------\\r\\n\\r\\n\\r\\n\";\r\n\u00a0\u00a0\u00a0 $creations = \"\";\r\n\u00a0\u00a0\u00a0 $insertions = \"\\r\\n\\r\\n\";\r\n\u00a0\u00a0\u00a0 $listeTables = mysql_query(\"show tables\", $connexion);\r\n\u00a0\u00a0\u00a0 while($table = mysql_fetch_array($listeTables))\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ si l'utilisateur a demand\u00e9 la structure ou la totale\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $creations .= \"-- -----------------------------\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $creations .= \"-- creation de la table \".$table[0].\"\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $creations .= \"-- -----------------------------\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $listeCreationsTables = mysql_query(\"show create table \".$table[0], $connexion);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while($creationTable = mysql_fetch_array($listeCreationsTables)){\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $creations .= $creationTable[1].\";\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ si l'utilisateur a demand\u00e9 les donn\u00e9es ou la totale\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $donnees = mysql_query(\"SELECT * FROM \".$table[0]);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= \"-- -----------------------------\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= \"-- insertions dans la table \".$table[0].\"\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= \"-- -----------------------------\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while($nuplet = mysql_fetch_array($donnees))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= \"INSERT INTO \".$table[0].\" VALUES(\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for($i=0; $i &lt; mysql_num_fields($donnees); $i++)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $FieldType=mysql_field_type($donnees, $i);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if($i != 0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .=\u00a0 \", \";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if($FieldType == \"string\" || $FieldType == \"blob\" || $FieldType == 'datetime')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .=\u00a0 \"'\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= addslashes($nuplet[$i]);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if($FieldType == \"string\" || $FieldType == \"blob\" || $FieldType == 'datetime')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .=\u00a0 \"'\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .=\u00a0 \");\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $insertions .= \"\\r\\n\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 mysql_close($connexion);\r\n\u00a0\u00a0\u00a0 echo \"Sauvegarde r\u00e9alis\u00e9e avec succ\u00e8s !!\";\r\n\u00a0\u00a0\u00a0 return(array($entete,$creations,$insertions));\r\n}\r\n?&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd&rsquo;hui, j&rsquo;ai fait une connerie&#8230; J&rsquo;ai dropp\u00e9 tout le contenu de ma base de donn\u00e9e MySQL qui h\u00e9bergeait ce site. Bon, pas grave, j&rsquo;ai des backups (mis en place il y a 3 ans) et ils sont r\u00e9guli\u00e8rement recr\u00e9\u00e9s, tout va bien. Et bien non&#8230; Le script que j&rsquo;utilise (chopp\u00e9 sur le net) ne m&rsquo;encapsule [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[65,66,44],"tags":[],"class_list":["post-401","post","type-post","status-publish","format-standard","hentry","category-backup","category-mysql","category-scripting"],"_links":{"self":[{"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/posts\/401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/comments?post=401"}],"version-history":[{"count":5,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/posts\/401\/revisions"}],"predecessor-version":[{"id":406,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/posts\/401\/revisions\/406"}],"wp:attachment":[{"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/media?parent=401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/categories?post=401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/snakenet.eu\/blog\/wp-json\/wp\/v2\/tags?post=401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}