Comment faire une sauvegarde et restaurer une base de données MySQL
Si vous stockez des données dans une base de données MySQL et que vous souhaitez éviter de les perdre, il est important de faire des sauvegardes régulièrement. Cet article vous apprendra à réaliser rapidement des sauvegardes via la console et à les restaurer dans MySQL. Vous pourrez également transférer les données vers un autre serveur.
- Comment faire une sauvegarde via la ligne de commande (en utilisant mysqldump)
- Comment faire une sauvegarde compressée de la base MySQL
- Comment restaurer une base MySQL à partir d’une sauvegarde
- Sauvegarde et restauration via Adminer
Comment faire une sauvegarde via la ligne de commande (en utilisant mysqldump)
Si vous avez un accès serveur via la console (SSH), vous pouvez rapidement faire des sauvegardes et les déployer. Cela permet de créer rapidement un dump de la base de données (un dump est une version textuelle de la base) et de le restaurer, plus rapidement qu’avec phpMyAdmin, Adminer, ou autres. Le dump contiendra des commandes SQL pour recréer votre base. Voici la commande pour créer un dump :
$ mysqldump --opt -u [utilisateur] -p[motdepasse] [nom_base] > [fichier_backup.sql]
[utilisateur] - Nom d’utilisateur MySQL (souvent root)
[motdepasse] - Mot de passe de l’utilisateur, on peut l’écrire directement sans espaces ni caractères spéciaux, par exemple -proot, -ppassword
[nom_base] - Nom de votre base de données
[fichier_backup.sql] - Nom du fichier dans lequel la sauvegarde sera enregistrée
[--opt] - Options pour mysqldump, optionnel
Par exemple, si vous avez une base Drupal, utilisateur root, mot de passe password, et le fichier s’appelle backup.sql, la commande sera :
$ mysqldump -u root -ppassword DrupalDB > backup.sql
Si vous ne souhaitez pas écrire le mot de passe directement ou s’il contient des espaces ou caractères spéciaux (#!,-_), alors vous devrez saisir le mot de passe après la commande :
$ mysqldump -u root -p DrupalDB > backup.sql
Vous pouvez aussi sauvegarder des tables spécifiques en les listant après le nom de la base, par exemple nodes et users :
$ mysqldump -u root -p DrupalDB nodes users > backup.sql
De plus, pour sauvegarder plusieurs bases à la fois, utilisez l’option --databases suivie des bases :
$ mysqldump -u root -p --databases DrupalDB Drupal7 Drupal8 > backup.sql
Pour transférer entièrement un serveur MySQL, vous pouvez copier toutes les bases avec l’option --all-databases :
$ mysqldump -u root -p --all-databases > alldb_backup.sql
La commande mysqldump possède aussi plusieurs options utiles :
--add-drop-table - supprime les tables avant de les recréer (le dump inclut des commandes DROP TABLE avant les CREATE TABLE).
--no-data - copie seulement la structure de la base, sans les données, utile pour les tables de cache qui peuvent contenir des milliers d’enregistrements inutiles dans Drupal.
--add-lock - ajoute LOCK TABLES et UNLOCK TABLES, ce qui peut bloquer les tables longtemps si la base est volumineuse.
Comment faire une sauvegarde compressée de la base MySQL
Probablement la meilleure option car la compression réduit la taille des sauvegardes de 10 à 20 fois, rendant même les grosses bases assez compactes. Nous utiliserons la commande gzip :
$ mysqldump -u root -p DrupalDB | gzip -9 > backup.sql.gz
Pour décompresser un fichier (sans restaurer la base, juste décompresser), utilisez :
$ gunzip backup.sql.gz
Comment restaurer une base MySQL à partir d’une sauvegarde
Pour restaurer la base à partir d’un dump, vous devez avoir une base vide ; vous pouvez supprimer les tables via Adminer ou phpMyAdmin. Si vous avez utilisé l’option --add-drop-table, les tables seront supprimées automatiquement avant d’être recréées, donc vous n’aurez rien à supprimer manuellement. Voici la commande pour restaurer :
$ mysql -u root -p DrupalDB < backup.sql
Si votre sauvegarde est compressée, utilisez cette commande :
gunzip < backup.sql.gz | mysql -u root -p DrupalDB
Sauvegarde et restauration via Adminer (alternative à PhpMyAdmin)
Adminer est une alternative à PhpMyAdmin. Il offre les mêmes fonctionnalités mais dans un seul fichier léger, ce qui est très pratique :
Il suffit de copier le fichier à la racine de votre site et d’y accéder via un navigateur :
http://nom_de_votre_site/adminer-4.2.1.php (vous pouvez le renommer en adminer.php pour plus de commodité) :
Connectez-vous et ouvrez la base souhaitée, par exemple Drupal7.
Cliquez sur Export (Dump) pour exporter les données. Vous pouvez choisir de ne pas exporter les données de cache inutiles :
Pour importer un dump, utilisez l’onglet Import :