MYSQL - Sauvegarde BDD

Source : http://www.siteduzero.com/tutoriel-3-38783-faire-une-sauvegarde-de-sa-base-de-donnees-mysql.html
Voilà, on va apprendre à faire une sauvegarde (ou un dump) de votre base de données MySQL sous Linux.

À quoi ça sert de faire un backup, une sauvegarde ou un dump ( :p ) de ma base de données ?


Tout simplement à ce que si votre serveur a un problème, vous risquez de perdre toutes vos données, donc on ne le dit jamais assez : faites des dumps de vos bases de données !

Toutes les commandes qui suivent devront être exécutées dans le terminal sous Linux. ;)


Alors voilà ;) ...

Dumper sa base de données MySQL

Dumper MySQL



Cette opération consiste à sauvegarder votre base de données.

Exécutez cette ligne :

Code : SQL - Sélectionner
1
mysqldump base_de_donnees -u utilisateur -p mot_de_passe > dump.sql gzip dump.sql


Ici, base_de_donnees, utilisateur et mot_de_passe sont à modifier avec vos informations. Vous pouvez modifier le nom dump.sql pour mabase.sql (par exemple).

Vous obtiendrez alors votre dump.sql.gzip.

Ne modifiez pas le .sql car sinon, votre code ne fonctionnera pas. Si vous modifiez le nom, changez-le les deux fois où il est appelé (pour le nom d'enregistrement et le gzip).


Le gzip permet de "zipper" (réduire la taille) de votre .sql, il est nécessaire pour ensuite vous servir à nouveau de cette sauvegarde (bah oui, sinon ça sert à rien :p). Le gzip est une technologie de zippage presque similaire au zip ou au rar (il y a aussi ace et tout ça :p). Vous n'êtes pas obligés de le mettre si votre base est petite mais il est conseillé, surtout plus bas quand on va voir comment dumper toutes ses bases :p .


Pour sauvegarder toutes les bases de données, exécutez cette ligne :

Code : SQL - Sélectionner
1
mysqldump -u utilisateur -p mot_de_passe --all-databases > dump.sql gzip dump.sql


Il est aussi possible de sauvegarder plus d'une base de données (mais pas toutes) en une seule commande, au lieu de le faire plusieurs fois :

Code : SQL - Sélectionner
1
mysqldump --databases base_de_donnees1 base_de_donnees2 ... > dump.sql


Ne copiez pas les " ... " dans la commande au-dessus, c'est juste pour dire qu'on peut en mettre plus. :p


Comme d'habitude, modifiez les informations dans la ligne de commande :) !

Récupérer sa base MySQL à partir d'un dump

Récupérer sa base MySQL avec un dump



Exécutez cette ligne :

Code : SQL - Sélectionner
1
gunzip dump.sql.gz mysql < base_de_donnees


Ici, modifiez le nom de base_de_donnees par celle où vous voulez que le contenu de votre dump ( sauvegarde :p ) soit extrait, et modifiez le dump.sql.zip par le nom de votre fichier.

Comme au-dessus, ne modifiez que le nom du dump, pas le .sql.gzip car sinon, votre code ne marchera pas :) !


Il est possible que vous deviez donner votre mot de passe pour recréer la base de données (ça dépend sous quel hébergeur vous êtes, mais c'est assez rare) :

Code : SQL - Sélectionner
1
gunzip dump.sql.gz mysql -p mot_de_passe < base_de_donnees


Ici, modifiez le nom du fichier (voir les deux "Attention !", plus haut), le base_de_donnees et le mot_de_passe, comme expliqué au-dessus.

Si votre dump n'a pas été gzippé, exécutez cette ligne :

Code : SQL - Sélectionner
1
mysql -u utilisateur -p mot_de_passe base_de_donnees < dump.sql


OK, donc on va finir avec un petit QCM :) :pirate: .

Et en PHP ?

Eh oui, c'est possible, il y a un code en PHP qui permet de faire un dump de votre base MySQL ! Voici le code PHP (merci à AdRi1 ;) ) :

Code : PHP - Sélectionner
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

$host = "localhost";
$user = "****";
$pass = "****"; // On définit les infos de la base de données
$db = "****";
$date = date("d-m-Y"); // On définit le variable $date (ici, son format)

$backup = $db."bdd-backup_".$date.".sql.gz";
// Utilise les fonctions système : MySQLdump & GZIP pour générer un backup gzipé
$command = "mysqldump -h$host -u$user -p$pass $db | gzip> $backup";
system($command);
// Démarre la procédure de téléchargement
$taille = filesize($backup);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/gzip");
header("Content-Disposition: attachment; filename=$backup;");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$taille);
@readfile($backup);
// Supprime le fichier temporaire du serveur
unlink($backup);
?>


Voilà ;) !

Ce script gzippe le dump de votre base MySQL !

Informations utiles

Sinon, pour plus d'informations, la documentation officielle sur -mysqldump :

Informations -mysqldump

Have fun ;) !
espaceur


ceydric