On peut réaliser les exports et imports de base de données d’une installation WordPress de plusieurs façons.
- Le plus fréquent, on passe par le BO du site WP, et on utilise des extensions de sauvegarde comme Updraft ou Backwpup …
- On peut aussi utiliser ce que nous propose l’hébergeur : un accès aux bdd via une interface graphique (généralement PhpMyAdmin ou Adminer), et on exporte ou importe le XXX.sql. A noter que l’hébergeur propose généralement aussi des sauvegardes de base de données qu’il réalise automatiquement pour les mettre à notre disposition. Par contre, elles ne comportent bien souvent que la date à laquelle elles ont été effectuées.
- La méthode rapide et efficace est de le faire en mode console en SSH en faisant un dump de la bdd puis une récupération de fichier avec la commande scp
Pour faire une sauvegarde de la base de données (dump), il y a la méthode un peu longue en écriture en utilisant mysqldump et la méthode aux petits oignons : utiliser WP-Cli.
Utiliser WP-CLI pour gérer ses bases de données
Avant de pouvoir utiliser les commandes de WP-CLI il faut d’abord mettre à disposition le script pour son site. On peut directement l’installer sur son hébergement, pour en bénéficier sur tous les sites wp. Vous pouvez trouver ici un mémo sur la procédure à suivre pour installer wp-cli sur un hébergement Infomaniak. On peut aussi juste embarquer le script dans l’instance d’un site (mais je trouve ça moins pratique)
Export de bdd avec wp-cli
Voir : https://developer.wordpress.org/cli/commands/db/export/
Générer le fichier de sauvegarde sql
Se placer à la racine de l’instance du site WordPress pour lequel on veut générer un fichier de sauvegarde .sql de la bdd.
Lancer la commande : wp db export
et garder la console ouverte pour après.
Même pas besoin d’en écrire davantage ! C’est simple non ? WP-CLI exécute l’utilitaire mysqldump en utilisant les identifiants de base de données DB_HOST, DB_NAME, DB_USER et DB_PASSWORD spécifiés dans le wp-config.php du site en question, donc pas besoin de rechercher ces infos pour les taper manuellement.
Après avoir lancé la commande, un fichier xxxx.sql s’installe à la racine de l’instance du site. Pour le nom du fichier il est composé par défaut du nom de la base de données suivi de la date et d’une série de 7 caractères, quelquechose de ce type : ma-base-2018-12-02-345a8c4.sql .
On peut aussi nommer le fichier d’export de bdd comme on le souhaite en ajoutant un nom à la commande wp-cli :
wp db export mon-nom-de-dump.sql
Vous pourrez parfois voir un ajout de l’option --add-drop-table
à cette commande. Cette option assure le fait que l’export de bdd contienne de quoi supprimer les tables d’une autre bdd dans laquelle il serait importé. En fait cette option est inutile, par défaut, la requête SQL DROP TABLE IF EXISTS
est déjà présente dans le fichier généré.
Rapatrier le fichier dans un endroit sûr
Pour rapatrier le fichier sur son PC, on peut le faire en FTP, ou en ouvrant une nouvelle console (sous linux) pour utiliser la commande scp suivante :
scp utilisateur@monserveur.example.fr:/chemin/vers/fichier.sql /chemin/vers/le/repertoire/local
Modifier les chemins pour correspondre aux vôtres. Vérifier sur son PC que le fichier est bien récupéré.
On peut alors supprimer le fichier .sql sur le serveur en retournant dans la précédente console déjà ouverte et en effectuant la commande :
rm ma-base-2018-12-02-345a8c4.sql
Import de bdd avec wp-cli
Voir : https://developer.wordpress.org/cli/commands/db/import/
On peut avoir besoin de faire des imports pour plusieurs raisons :
- restaurer un site en ligne qui a été corrompu
- ajouter sur un site en ligne, le contenu d’un site créé en premier lieu en local
- récupérer des données d’un site vers un autre (en ligne vers local et vice versa)
S’il s’agit de restaurer un site qui a été corrompu, on place le fichier de sauvegarde sql à la racine de l’instance du site. Les manip sont très simples, le préfixe des tables n’a pas changé, ni les url. Les anciennes tables seront remplacées par celles de la sauvegarde. Lancer la commande : wp db import ma-base-2018-12-02-345a8c4.sql
et c’est tout bon !
S’il s’agit de mettre en place un site en ligne tout neuf, à partir d’un site développé en local, on parle là de migration. La bdd hôte peut être vide pour le moment, ou avoir juste les tables par défaut faisant suite à une première installation. Là, il va falloir avoir en tête que les url sont différentes, peut être aussi le préfixe des tables, ainsi que les identifiants de connexion. Les infos pour se connecter à la bdd figurant dans le fichier wp-config.php du site en question, on adapte bien tout ça. On fait comme dans le cas précédent, ensuite on aura recours à une autre commande wp-cli : search replace pour modifer les url en base. Par exemple : wp search-replace 'http://monsite.dev' 'http://monsite.fr'
. On a, bien entendu récupéré tous les fichiers contenus dans le wp-content du site local pour les mettre dans le wp-content du site en ligne, il contient themes, plugins, uploads etc … Comme la migration de site wp n’est pas le sujet ici, je ne développe pas plus, mais je rédigerai un mémo pour ça prochainement.
Dans le cas d’une interopérabilité entre un site en ligne et sa version en local, il s’agit de la même chose qu’une migration qui sera faite un coup dans un sens, un coup dans l’autre.
Export/import bdd en SSH (la manière verbeuse …)
Je la mets ici juste pour mémoire, vu que wp-cli est bien plus pratique.
Se mettre sous le coude les infos suivantes :
- l’adresse du serveur MySQL
- son nom d’utilisateur MySQL
- le mot de passe utilisateur MySQL
- le nom de la base de donnée
Export
1- Adapter et exécuter la commande suivante :
mysqldump --host=adresse_serveur_mysql -u user_mysql --password=password_du_user_mysql nom_de_la_bdd > backup-22-09-18-avant-ajoutXXX.sql
2- Patienter pendant l’exécution de la commande SSH
3- Le fichier s’est installé sur l’hébergement au niveau de la racine
4- Si on le souhaite et que l’hébergeur le permet (module gzip à disposition) on peut la compresser :
gzip backup-22-09-18-avant-ajoutXXX.sql
5- Se connecter au serveur via SFTP
6- Télécharger le fichier sql généré pour l’installer en lieu sûr
7- Le supprimer de l’hébergement
Automatiser la sauvegarde
Je parlais tout à l’heure d’extensions de sauvegarde, mais si on sait faire ses sauvegardes soi même, on peut aussi faire en sorte que sa tâche soit effectuée de façon récurrente via un Script PHP que l’on passera en tâche Cron. Ce script devra être ajouté dans le planificateur de tâche de l’hébergeur (via le manager) pour demander à ce qu’elle soit exécutée selon le rythme voulu, tous les jours, ou toutes les semaines ou mois … Tout dépend du site et son activité.
Exemple de script : Sauvegarder et compresser 2 bases de données.
<?php
system("mysqldump --host=adresse_serveur_mysql --user=user_mysql --password=password_du_user_mysql nom_de_la_bdd > backup-mabase1-22-09-18.sql");
system("gzip backup-mabase1-22-09-18.sql");
system("mysqldump --host=adresse_serveur_mysql --user=user_mysql --password=password_du_user_mysql nom_de_la_bdd > backup-mabase2-22-09-18.sql");
system("gzip backup-mabase2-22-09-18.sql");
Import
Importer des tables dans une base de données vierge précédemment créée via le manager de l’hébergement.
1- En SFTP, déposer le fichier backup.sql.gzip ou backup.sql sur l’hébergement pour le mettre à disposition. On le place où on veut, bien noter l’emplacement.
2- Se connecter en SSH au serveur
3- Si le fichier est zippé, le dézipper
unzip backup.sql.gzip
4- Saisir et adapter la commande suivante :
mysql --verbose -u user_mysql -p nom_de_la_bdd -h adresse_serveur_mysql < path
path étant le chemin vers le dossier dans lequel le fichier sql a été mis à disposition sur l’hébergement à l’étape 1. Par exemple : ~/tmp/test.sql
5 – patienter, l’importation peut durer plusieurs minutes selon sa taille.