Sauvegarde complète en MySQLi d'une base de données SQL
Compatibilité : PHP 5, PHP 7, PHP 8
Dump (sauvegarde) avec PHP d'une base de données MySQL - Cela inclus les tables et les enregistrements.
Avec ce script vous pouvez faire un dump (une sauvegarde) facilement de votre base de donnée.
Pour le faire il vous suffit de renseigner les paramètres SQL, ensuite de créer un fichier "sauvegarde.sql" au meme niveau que votre script php et ensuite de paramétrer la fonction dump_MySQL.
Voir en MySQLi un code identique : Sauvegarde complète d'une base de données MySQL
|
|
| php.net | Description | Versions PHP | OUTIL |
|---|---|---|---|
| addslashes | Ajoute des anti-slash dans une chaîne - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| date | Formate une date/heure locale - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| echo | Affiche une chaîne de caractères - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| fclose | Ferme un fichier - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| fopen | Ouverture d'un fichier ou d'une URL - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| fwrite | Ecrit un fichier en mode binaire - (PHP 4, PHP... | PHP 4, PHP 5, PHP 7, PHP 8 | |
| mysql_close | Ferme la connexion MySQL - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_connect | Ouvre une connexion à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_fetch_array | Retourne une ligne de résultat MySQL sous la forme d'un tableau - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_field_type | Retourne le type d'une colonne MySQL spécifique - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_num_fields | Retourne le nombre de champs d'un résultat MySQL - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_query | Envoie une requête à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
| mysql_select_db | Sélectionne une base de données MySQL - (PHP 4, PHP 5, PECL mysql:1.0) ! OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0 | ||
Dump (sauvegarde) avec PHP d'une base de données MySQL - Cela inclus les tables et les enregistrements.
Liste toute les tables de votre base de données MySQL dans un tableau HTML. Affiche des liens à chaque table trouvée avec la possibilité de supprimer la table.
Permet de lister toute les tables de votre base de données MySQL et peut aussi supprimer une ou plusieurs tables via un lien.
Fonction récursive permettant d'afficher la valeur d'un entier base 10 en base 2. Aucune limitation.
Insère un élément dans un tableau selon la clé. La fonction accepte les tableaux uniquement avec des clés numériques.
Invité
20 Mars 2021 à 19:08merci bq :) :) :) ................
Invité
28 Mars 2012 à 00:12Bonjour,
J'ai un problème avec ce code, les accents ne s'affiche pas dans le fichier obtebu, erreur encodage utf8
Berfonta
24 Avril 2011 à 10:02C'est tellement sympa que je n'hésite pas à rajouter 3 remarques :
- Rapidité : l'entrée des données une à une prend beaucoup de temps. Avec 1 seule requête par table, on va 10 fois plus vite.
- Contraintes : l'ordre alphabétique ne convient pas aux tables avec clés externes, sauf si on bloque le contrôle provisoirement :
SET FOREIGN_KEY_CHECKS = 0; ... puis = 1 à la fin.
- Ràz auto : l'importation, dans PhpMyAdmin par exemple, nécessite de détruire les tables avant. Ils préfèrent laisser ce risque à l'utilisateur... On peut rajouter une autre requête, unique aussi, pour les 'dropper' au début.
On peut ainsi préparer une chaîne $drop que l'on remplit à chaque nom de table disponible et qui sera insérée en tête du fichier.
Bien entendu avant d'utiliser ce programme, il faut toujours sauvegarder la base actuelle avant.
J'obtiens le fichier suivant en ajoutant la remarque de Benicode et en simplifiant un poil.
Tests avec : WampServer 2.1 / PhpMyAdmin 3.3.9 / Apache 2.2.17 / MySql 5.5.8 / PHP 5.3.5
function isNeededQuotes($type) {
return( $type == "string" || $type == "blob" || $type == "datetime" ||
$type == "date" || $type == "timestamp" || $type == "time" || $type == "year");
}
function dump_MySQL($serveur, $login, $password, $base, $fichier, $mode) {
$connexion = mysql_connect($serveur, $login, $password);
mysql_select_db($base, $connexion);
$drops = "-- dump de la base ".$base." au ".date("d-M-Y")."\n"; // Première ligne
$creations = $insertions = ""; // SET : pour introduction désordonnée des tables :
$deb_drop = "\nSET FOREIGN_KEY_CHECKS = 0;\n\nDROP TABLE IF EXISTS\n `"; // effacement des tables
$listeTables = mysql_query("show tables", $connexion); // var_dump($listeTables);
while($table = mysql_fetch_array($listeTables))
{
if($mode == 1 || $mode == 2) // structure ou la totalité de la BDD
{
$listeCreationsTables = mysql_query("show create table ".$table[0], $connexion);
$drops .= $deb_drop.$table[0]; $deb_drop = "`,\n `"; // Suppression de la table
while($creationTable = mysql_fetch_array($listeCreationsTables))
$creations .= $creationTable[1].";\n\n";
}
if($mode > 1) // données ou la totalité
{
if($donnees = mysql_query("SELECT * FROM ".$table[0])) {
$insertions .= "INSERT INTO `".$table[0]."` VALUES\n"; // 1 seule requête par table vitesse x 10
$nuplet = mysql_fetch_array($donnees);
while($nuplet) { // toutes les données vont suivre 'encadrées' si nécessaire :
$insertions .= "(";
for($i=0; $i < mysql_num_fields($donnees); $i++) {
if($i > 0) $insertions .= ", ";
$quote = isNeededQuotes(mysql_field_type($donnees, $i)) ? "'" : "";
$insertions .= $quote.addslashes($nuplet[$i]).$quote; } // et hop ! c emballé
if($nuplet = mysql_fetch_array($donnees)) $insertions .= "),\n"; } // , : ce n'est pas fini :
$insertions .= ");\n\n"; } // ; : final
}
}
mysql_close($connexion);
$drops .= "`;\n\n";
$insertions .= "SET FOREIGN_KEY_CHECKS = 1;\n\n"; // !! Ne pas l'oublier à la fin !!
$fichierDump = fopen($fichier, "wb");
fwrite($fichierDump, $drops);
fwrite($fichierDump, $creations);
fwrite($fichierDump, $insertions);
fclose($fichierDump);
echo "Sauvegarde de ".$fichier." terminée";
} dump_MySQL("localhost", "root", "mot_pass", "ma_base", "dump.sql", 2);
Benicode
10 Nov 2010 à 01:10Hi, Ton Code est sympa MAIS ATTENTION pour les quotes sur les types de date genre "datetime" ou autres cela ne fonctionne PAS... J'ai modifié un poil ton code pour qu'il fonctionne aussi pour ces cas là : function isNeededToInsertQuotes($typeOfdata){
return ( $typeOfdata == "string"
|| $typeOfdata == "blob"
|| $typeOfdata == "datetime"
|| $typeOfdata == "date"
|| $typeOfdata == "timestamp"
|| $typeOfdata == "time"
|| $typeOfdata == "year"
);
}
function dump_MySQL($serveur, $login, $password, $base, $mode)
{
$connexion = mysql_connect($serveur, $login, $password);
mysql_select_db($base, $connexion);
$entete = "-- ----------------------\n";
$entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\n";
$entete .= "-- ----------------------\n\n\n";
$creations = "";
$insertions = "\n\n";
$listeTables = mysql_query("show tables", $connexion);
while($table = mysql_fetch_array($listeTables))
{
// structure ou la totalité de la BDD
if($mode == 1 || $mode == 2)
{
$creations .= "-- -----------------------------\n";
$creations .= "-- Structure de la table ".$table[0]."\n";
$creations .= "-- -----------------------------\n";
$listeCreationsTables = mysql_query("show create table ".$table[0],
$connexion);
while($creationTable = mysql_fetch_array($listeCreationsTables))
{
$creations .= $creationTable[1].";\n\n";
}
}
// données ou la totalité
if($mode > 1)
{
$donnees = mysql_query("SELECT * FROM ".$table[0]);
$insertions .= "-- -----------------------------\n";
$insertions .= "-- Contenu de la table ".$table[0]."\n";
$insertions .= "-- -----------------------------\n";
while($nuplet = mysql_fetch_array($donnees))
{
$insertions .= "INSERT INTO ".$table[0]." VALUES(";
for($i=0; $i < mysql_num_fields($donnees); $i++)
{
if($i != 0)
$insertions .= ", ";
$typeOfdata = mysql_field_type($donnees, $i);
$bInsertQuotes = isNeededToInsertQuotes($typeOfdata);
if($bInsertQuotes)
$insertions .= "'";
$insertions .= addslashes($nuplet[$i]);
if($bInsertQuotes)
$insertions .= "'";
}
$insertions .= ");\n";
}
$insertions .= "\n";
}
}
mysql_close($connexion);
$fichierDump = fopen("sauvegarde.sql", "wb");
fwrite($fichierDump, $entete);
fwrite($fichierDump, $creations);
fwrite($fichierDump, $insertions);
fclose($fichierDump);
echo "Sauvegarde terminée";
}
Smed79
04 Nov 2010 à 02:27J'ai testé le code, ça fonction à merveille !!! Encore Merci à toi...