Logo MariaDB

Changer le domaine des liens dans votre base de données MySQL/MariaDB

closeCet article a été publié il y a 9 ans 4 mois 11 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

En ce moment, c’est test à portées multiples à la maison : j’ai importé une sauvegarde du blog, qui tourne actuellement avec Apache, sur une machine virtuelle propulsée par nginx (rappel : j’ai déjà basculé sur PHP-FPM); avec succès semble-t-il, ce qui m’a poussé à démarrer le travail sur le futur thème (on va dire pour Noël le temps pour le graphiste/designer que je ne suis pas de peaufiner le truc). Comme c’est une copie locale, j’ai du modifier, dans les paramètres WordPress, l’adresse du site. Mais il reste une chose qui ne change pas d’elle-même : tous les liens contenus dans les articles pointant vers d’autres articles du blog. Si je veux tester jusqu’au bout, il faut aussi modifier ceux-là. Par chance, point besoin de modifier chaque article, chaque lien l’un après l’autre, il y a même plusieurs façons de faire pour modifier le contenu de la base de données. Voyons voir ça.

RAPPEL : J’ai déjà modifié le nom et l’adresse du site dans les options de WordPress, dans l’interface d’administration. Ici, les modifications ne concernent que les liens vers les articles. Aussi, j’aborde le cas pratique de WordPress, mais les manipulations sont valables pour n’importe quelle base de données nécessitant de « massivement » modifier des informations. Et toutes les manipulations décrites ont été faites sur une Debian Wheezy avec MariaDB 10.0.15.

Que doit-on modifier ?

Les articles sont stockés dans la table wp_posts. Si on regarde de plus près, on constate qu’elle contient beaucoup d’articles, plus que ce qui est publié sur le blog !

919 lignes pour un peu plus de 60 articles, what the ?

919 lignes pour un peu plus de 60 articles, what the ?

En effet, cette table garde aussi la trace de toutes les révisions des articles (le champ post_status permettant de définir le… statut de l’entrée : publish, inherit).

Il nous faudra modifier deux choses en particulier : les liens du champ ‘guid’ (qui permettent de « nommer » les articles en interne, mais qui contiennent le domaine), et les liens qui se trouvent dans le contenu même des articles/révisions (dans le champ ‘post_content’). Fort heureusement, il n’est pas nécessaire de tout faire à la main (vous imaginez modifier 900+ lignes ?), et il existe plusieurs façons de faire.

Aussi, je ne peux que conseiller de faire une sauvegarde avant pour être sûr. Pour ça, PHPMyAdmin ou mysqldump feront l’affaire. Pour ce dernier, la commande est simple :

Voir la page de manuel pour les options plus précises. Et suivant la quantité de modifications à apporter, il est préférable de couper l’accès au site.

Dans la suite de l’article, je remplace blog.seboss666.info par test.seboss666.info/blog, qui vous vous en doutez n’existe pas.

Avec le client MySQL

Probablement le plus « direct », mais nécessite de travailler en direct sur la base.  Je vais tout de même rappeler, pour les têtes en l’air comme moi, comment se connecter à une base MariaDB (ou MySQL, c’est pareil, je vais pas le répéter à chaque fois :P) :

Evidémment on remplace user, password et base_wordpress par les utilisateur/mot de passe/nom de la base hein 🙂

MariaDB dispose d’une fonction très pratique, replace(), qui permet de procéder à des remplacements. Commençons par le guid, avec la commande suivante :

Sans préciser de condition WHERE, MariaDB va traiter toutes les entrées de la table wp_posts. Ne pas paniquer si la commande prend du temps, vu le nombre de lignes. Il faut ensuite s’occuper du contenu. La commande est pratiquement identique :

Et voilà, ça devrait faire l’affaire.

Avec PHPMyAdmin (commande directe)

Si vous avez un accès « complet » à PHPMyAdmin (j’ai eu le tour une fois avec un PHPMyAdmin castré, sous prétexte de sécurité–on pouvait tout de même importer des sauvegardes, allez comprendre…), vous pouvez saisir directement des commandes SQL. Il suffit juste de prévoir de sélectionner la bonne base de données, et les commandes sont alors strictement les mêmes que celles saisies dans le client MariaDB directement.

wp-update-pma-sql

En modifiant une sauvegarde

C’est un autre moyen de faire, un poil plus dangereux parce que plus « généraliste », mais ça fonctionne aussi. Elle est surtout plus adaptée si d’aventure, vous ne pouviez pas exécuter directement des commandes. C’est peut-être plus adapté dans le cadre d’un hébergement mutualisé, ou si vous avez peur de saisir directement des commandes SQL. Donc pareil, on fait une sauvegarde (par PHPMyAdmin ou mysqldump), sauf que ce coup-ci, on va en faire une copie, et modifier cette copie à l’aide d’un bon éditeur de textes disposant de la fonction remplacer. Et encore, quand je dis « bon », même le bon vieux Notepad de Windows propose la fonctionnalité. Car oui, la sauvegarde SQL est un gros fichier texte qu’il suffit d’ouvrir avec votre éditeur. Ensuite, il suffit d’ouvrir le menu « Édition », et de sélectionner « Remplacer… » (ou plus rapide, le raccourci clavier Ctrl+H) qui conduit à l’ouverture de la fenêtre suivante :

wp-update-notepad

On fait comme c’est montré, à savoir blog.seboss666.info dans le champ « à remplacer », et test.seboss666.info/blog dans le champ remplacement. Et on clique ensuite sur « Remplacer tout », qui devrait vous dire combien de « liens » (occurrences) il a modifié. Il n’y a plus alors qu’à sauvegarder, puis importer la sauvegarde dans la base (soit avec le client en ligne de commande, soit avec PHPMyAdmin).

Des commandes « portables »

En effet, d’une part je n’ai abordé que deux outils, qui sont parmi les plus utilisés pour manipuler des bases de données MySQL/MariaDB, mais elles sont utilisables à priori dans d’autres outils, (je pense à SQLBuddy, abandonné mais toujours fonctionnel), voire même en utilisant un script maison (PHP, Python, faites votre choix). De plus, j’ai abordé le cas pratique des noms de domaine lors d’une migration d’un blog WordPress, mais sachez que vous pouvez remplacer à peu près n’importe quelle information de n’importe quelle base avec ces commandes, moyennant un poil d’adaptation évidemment.

Notez aussi que si vous utilisez des extensions de nature à stocker le nom de domaine du site, il faudra aussi y prêter attention. Je pense entre autres  aux commentaires, car même si j’utilise Disqus, une copie des commentaires est stockée au cas où je déciderais de m’en passer. Bref, si vous avez le savoir pour manipuler de la base de données, la gestion des plugins WordPress ne devrait pas être trop difficiles pour vous.