Drupal : Gérer la base de données avec Drush

Comme expliqué dans un précédent article, Drush est un outil indispensable pour tout développeur Drupal qui veut s’économiser du temps et des cheveux blancs. En plus de permettre une gestion rapide et efficace des modules, Drush permet aussi de gérer votre base de données en un clin d’oeil. Vous pouvez ainsi vous y connectez, y faire des mises à jour, en faire des backup ou au contraire, la réinstaller et ceci grâce à quelques lignes de commandes. Je précise, je travaille encore et toujours sur GNU/Linux.

Avant de commencer à expliquer l’utilisation de Drush pour la base de données, j’explique d’abord une petite subtilité avant que les nouveaux utilisateurs s’arrachent totalement les cheveux. Pour utiliser la commande Drush, vous devez être dans le dossier de votre site. C’est à dire, pas seulement dans l’arborescence de votre installation Drupal mais bien dans le dossier sites/mon.site.drupal. Que vous soyez directement dans ce dossier ou dans un sous-dossier n’a aucune importance, l’important, c’est quand remontant dans l’arborescence, Drush finissent par trouver le fichier settings.php de votre site. Si vous êtes dans le dossier sites/all ou dans un autre dossier général de votre installation Drupal, Drush ne pourra pas trouver les informations de votre site pour savoir comment exécuter vos commandes. Vous avez donc deux possibilités:
– Exécuter Drush dans l’arborescence de /sites/mon.site.drupal
– Ajouter l’option --uri=mon.site.drupal

Les deux possibilités sont un peu contraignante, la première vous oblige à changer de dossier si jamais vous êtes dans sites/all ou ailleurs, la deuxième peut vous obliger à taper un nom de dossier possiblement long. Dans un autre article, j’expliquerais une alternative à ce second problème grâce aux alias.

Revenons à notre base de données: si vous désirez vous connecter en 1 seconde à la base de données de votre site en ligne de commande, il vous suffit dans votre prompt de taper la commande:

drush --uri=[nom-du-site] sqlc

Drush va directement récupérer le nom d’utilisateur, le mot de passe et le nom de la base dans votre fichier settings.php et va simplement invoquer la commande de MySQL ou Postgres pour se connecter directement à la base. Vous n’avez plus qu’à balancer vos requêtes SQL.

Une autre chose très pratique avec Drush est la possibilité de faire des backup de votre base de données en à peu près 2 secondes chrono. Simple, efficace, rapide, même les personnes qui ont peur de la ligne de commande et qui utilisent toujours l’interface de PhpMyAdmin pourrait bien adopter cette méthode:

drush --uri=[nom-du-site] sql-dump > sauvegarde_bdd.sql

Votre sauvegarde sql va donc simplement s’écrire dans le fichier sauvegarde_bdd.sql. Faites attention d’avoir les droits d’écrire dans le dossier où vous voulez que le fichier sauvegarde_bdd.sql se crée bien entendu. Je rappelle que l’utilisateur qui à les droits sur les dossier d’apache doit être www-data.

Étant donné que je me sers beaucoup de cette commande pour faire des migrations, par exemple, passer mon site de la version développement à la version pré-production, je donne mon astuce pour faire changer le nom du site dans le sql en 2 secondes (utile pour le nom du site mais aussi et surtout pour le chemin de fichiers).

sed -i ‘s/valeur_ancien/valeur_nouvelle/g’ sauvegarde_bdd.sql

Pour ceux qui ne connaissent pas la commande sed, c’est une commande très pratique qui permet de faire des transformations de texte sans ouvrir d’éditeur. Dans la commande ci-dessus, j’effectue une substitution, c’est à dire que je vais échanger une chaîne de caractère contre une autre. Nous allons nous intéresser d’abord à ce qui se trouve entre quote, c’est à dire:

‘s/valeur_ancien/valeur_nouvelle/g’

Cette partie est divisée en quatre avec comme symbole de division un slash. Ce symbole séparateur n’a pas besoin d’être nécessairement un slash, on retrouve beaucoup le dièse # dans les exemples de cette commande. La seule règle, c’est que votre séparateur ne doit être présent dans cette partie de la commande qu’en tant que séparateur.
Je signifie à sed que je vais l’utiliser pour une substitution avec la lettre ‘s’ au tout début de ma chaîne entre côte. Après mon séparateur, j’écris la chaîne de caractère que je souhaite remplacer. Nouveau séparateur, j’indique la chaîne de caractère qui remplacera la première. Le g après le dernier séparateur indique que je désire que cette opération soit effectué sur la totalité de mon fichier.
Pour la globalité de la commande, le nom du fichier que l’on désire utilisé pour faire la substitution se retrouve à la fin, l’option -i au début indique que l’on désire que le résultat soit pris en compte dans le fichier. En effet, si vous n’utilisez pas cette option, la commande affichera son résultat dans la console. Si vous ne désirez pas envoyer le nouveau résultat dans le fichier, vous devez utiliser des redirections de flux comme ceci:

sed ‘s/valeur_ancien/valeur_nouvelle/g’ < sauvegarde_bdd.sql > sauvegarde_bdd_substitution.sql

Ainsi, votre fichier sauvegarde_bdd.sql restera le même et son contenu avec la chaîne remplacée sera dans sauvegarde_bdd_substitution.sql.
Sachez que la commande sed ne permet pas de faire que cela, très loin de là. Vous pouvez utiliser des expressions régulières dans vos substitution et faire d’autres choses bien plus complexe encore. Mais je vous laisse découvrir ça sur le site de de GNU.org (et ailleurs si les sites tout blancs vous font peur).

Pour réinstaller votre ancienne version de la base sur votre site (ou installer la nouvelle) en quelques secondes, il vous suffit d’utiliser cette commande:

cat sauvegarde_bdd.sql | drush –uri=[nom-du-site] sqlc

Oui, c’est super simple dans l’idée, on affiche le contenu de notre fichier sql et avec un pipe, on renvoie ce contenu vers la commande drush sqlc. On attend que la commande s’exécute et voilà. Lancer la commande pour vider le cache histoire de prévenir d’éventuels problèmes :

drush –uri=[nom-du-site] cc all

Et voilà. Simple et très économique en temps.

Post to Twitter Post to Facebook Post to Google Buzz Post to LinkedIn

Laissez un commentaire

« »