Duplication d'une base de données pour sauvegarde

Contenu du snippet

Si l'on a un serveur qui permet d'avoir un nombre "illimité" de bases de données, la sauvegarde complète d'une base de données peut permettre de faire des restaurations rapides si de graves erreurs sont faites sur la base de production (suppression ou vidage de tables.
Ce script n'est donc pas à utiliser sur des serveurs mutualisés ou gratuits qui ne proposent qu'une seule base !
Attention, ce petit script ne vous dispense pas de faire des exportations de base (à récupérer sur votre ordinateur) en cas de crash du serveur sql !

Source / Exemple :


<?
$db="base"; // Base a sauvegarder
$dbdest=$db."_".date("Ymd_Hi"); // Cela créera la base avec le nom de la base intiale + date et heure ex : base_20001231_2359
// Fonction permettant de gérer le moteur de stockage InnoDB. N'a pas d'intérêt pour les moteurs MyIsam mais fonctionne cf commentaire de webdeb le 19/12/2008 13:23:23 
function begin()
{
@mysql_query("BEGIN");
}
function commit()
{
@mysql_query("COMMIT");
}
function rollback()
{
@mysql_query("ROLLBACK");
}

$connexion=mysql_connect("localhost","root","pass"); //on effectue la connexion
if (!$connexion) {
die('Connexion impossible : ' . mysql_error());
exit;
}

echo "Lancement de la sauvegarde<br><br>\n";

//Création de la base de données de sauvegarde
$SQL="CREATE DATABASE `$dbdest` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; // Si besoin modifier les character
$result=mysql_query($SQL);
if (!$result) {
die('Erreur sur la creation de la base $dbdest : ' . mysql_error());
exit;
}

echo "Base $dbdest créée.<br>\n";

//Création et copie des tables
$tables = mysql_list_tables($db, $connexion);
while ($enr = mysql_fetch_row($tables)) {
$SQL="CREATE TABLE $dbdest.$enr[0] SELECT * FROM $db.$enr[0];";
begin();
$result=@mysql_query($SQL);
if (!$result) {
rollback();
die('Requête invalide sur la table $enr[0] : ' . mysql_error());
exit;
}else{
commit();
echo "TABLE ".$enr[0]." sauvegardée.<br>\n";
}
}
echo "<br><br>Sauvegarde terminée. La base de sauvegarde est $dbdest.<br>\n\n";
mysql_close($connexion);
?>

Conclusion :


Le but est surtout de pouvoir faire des sauvegardes rapides et de mettre cette page à la disposition des personnes qui modifient les bases de données. Elles gèrent ainsi leurs sauvegardes.
Tous les commentaires sont bons. Merci.

Attention, je redis qu'il faut avoir la possibilité de créer des bases de données multiples.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.