Comment réaliser une sauvegarde ou une restauration de ma base de données?

De PHPnet Wiki.

Sommaire

Hébergements mutualisés et Prémiums

Si vous désirez qu'une sauvegarde automatique d'une ou plusieurs bases soit mise en place :

  • Rendez-vous dans le panel, section "Bases MySQL" et demandez un DUMP de la base que vous voulez sauvegarder. Le DUMP sera effectué le lendemain à 05h00 (GMT+1) et sera créé à la racine de votre répertoire FTP dans un fichier nommé nom_de_la_base.sql sur un mutualisé ou dans le répertoire archive sur votre Premium.


Si vous désirez exporter ou importer une base (ou seulement une partie de cette dernière) :

  • Soit votre base de données n'est pas très grosse et vous pourrez l'exporter et/ou l'importer via phpMyAdmin. Cliquez alors sur l'onglet "Exporter" ou "Importer" et sélectionner le fichier correspondant sur votre ordinateur.
  • Soit votre base de données est importante et dans ce cas, phpMyAdmin fera un timeout (dépassement du temps maximal d'exécution pour un script) vous empêchant de réaliser l'opération. Le plus simple est alors d'utiliser un script tel que BigDump ou un logiciel tiers tel MySQLFront ou MySQL WorkBench, de vous connecter au serveur et de créer ou restaurer le DUMP ainsi.


Premiums, VDS et Dédiés

Vous pouvez soit installer des outils tels que phpMyAdmin qui vous permettrons à la même manière qu'en mutualisé de gérer vos bases, soit automatiser et/ou faire manuellement des dumps depuis la ligne de commande (pas de problèmes de timeout par exemple).

Il est également possible d'utiliser les outils cités plus haut mais dans ce cas, il ne faut pas oublier d'autoriser les connexions externes à votre utilisateur MySQL (ainsi qu'au serveur MySQL en lui même).


En vous connecter en SSH (ligne de commande) sur la machine, vous pouvez par exemple utiliser mysqlhotcopy (si vous faites un dump de bases sur la machine elle même, ne fonctionnera pas sur des bases distantes) ou mysqldump (fonctionnera en local ou avec des bases distantes mais sera un peu plus lent que mysqlhotcopy) :

Export de base(s) (dump)

Pour faire un dump avec mysqldump des bases "base1" et "base2" sur localhost (machine locale) :

   mysqldump -hlocalhost -uloginsql -pmotdepassedelabase --databases base1 base2 > /repertoire/mon_dump.sql

(il est également possible de spécifier manuellement le mot de passe en remplaçant "-pmotdepassedelabase" par "-p", il sera alors demandé d'entrer le mot de passe au lancement de la commande)

Restauration de base(s)

Pour restaurer un de ces dumps :

   mysql -uloginsql -pmotdepassedelabase -hlocalhost < /chemin/mon_dump.sql


Copie de bases (avec mysqlhotcopy)

Pour faire une copie des bases avec mysqlhotcopy (nécessite d'avoir un accès aux deux serveurs MySQL et ne fonctionne que pour les bases en ISAM ou en MyISAM, pas pour les bases en InnoDB) :

   mysqlhotcopy base1 /repertoiredesdump/

Cela créera un répertoire /repertoiredesdump/base1 avec une copie des bases originelles qui se trouvent dans /var/lib/mysql/, pour ré-importer cette sauvegarde il faut couper le serveur mysql (/etc/init.d/mysql stop) puis remplacer /var/lib/mysql/base1/ par celui qui est dans /repertoiredesdump/base1 (renommer l'ancien répertoire par sécurité) puis relancer mysql (/etc/init.d/mysql start).


Export/import de base(s) avec compression/décompression à la volée des fichiers

Compresser les fichiers .sql à la volée en gunzip (.gz) pour économiser de la place vous pouvez utiliser au moment du dump :

   mysqldump -hlocalhost -uloginsql -pmotdepassedelabase --databases base1 base2 | gzip > /repertoiredesdump/dump.sql.gz

Et pour ré-importer directement ces dump compressés:

   gunzip < /repertoiredesdump/dump.sql.gz | mysql -uloginsql -pmotdepassedelabase -hlocalhost


Compression/décompression manuelle de fichiers

Pour manuellement compresser un fichier.sql au format gunzip (.gz) (cela crée fichier.sql.gz) :

   gzip lefichier.sql

Pour décompresser un lefichier.sql.gz (retire automatiquement l'extension .gz) :

   gunzip lefichier.sql.gz


La documentation officielle de mysqldump
La documentation officielle de mysqlhotcopy