Développement et bases de données
Remplacement et modifications en masse sur tout le contenu d'une base de données ou d'une application
Une recherche et un remplacement en masse peuvent être nécessaires lorsque vous changez de domaine ou activez HTTPS. Dans WordPress, il ne faut pas le faire avec un UPDATE ... REPLACE arbitraire : de nombreuses valeurs sont sérialisées et une substitution SQL directe peut corrompre leurs longueurs.
Préparation obligatoire
- Créez un environnement de staging à partir d'une copie récente de la production.
- Exportez la base avant chaque essai et vérifiez le fichier :
umask 077 wp db export "$HOME/wp-antes-reemplazo.sql" && test -s "$HOME/wp-antes-reemplazo.sql" && sha256sum "$HOME/wp-antes-reemplazo.sql" > "$HOME/wp-antes-reemplazo.sql.sha256"
Utilisez un nouveau nom pour chaque sauvegarde et vérifiez que wp db export se termine correctement. La somme de contrôle permet de détecter des modifications du fichier ; c'est le test de restauration qui vérifie s'il permet de récupérer la base. Protégez les fichiers hors du dossier public :
chmod 400 "$HOME/wp-antes-reemplazo.sql" "$HOME/wp-antes-reemplazo.sql.sha256" sha256sum -c "$HOME/wp-antes-reemplazo.sql.sha256"
- Téléchargez la sauvegarde et testez son import dans une base vide indépendante.
- Définissez la valeur exacte d'origine, de destination, les tables et les colonnes. N'exécutez pas une recherche sur toute la base si vous avez seulement besoin de modifier le contenu des articles.
Prévisualiser avec WP-CLI
Avant de continuer, installez et vérifiez WP-CLI sur le compte. WP-CLI préserve correctement les données sérialisées. Pour modifier des liens dans le contenu des articles, limitez l'opération à la table et à la colonne nécessaires et exécutez d'abord --dry-run :
wp search-replace 'http://dominio.example' 'https://dominio.example' wp_posts \ --include-columns=post_content \ --precise \ --report-changed-only \ --dry-run
Remplacez wp_posts par le nom réel si votre installation utilise un autre préfixe. Le mode --dry-run indique les correspondances, mais ne modifie aucun enregistrement : pour voir à quoi ressemblent les articles, vous devez exécuter la modification réelle sur le clone.
Vérifiez le nombre de modifications prévues. S'il inclut des tables ou des colonnes non prévues, restreignez la recherche avant d'exécuter la modification réelle en staging. Contrôlez ensuite un échantillon des articles modifiés avant d'appliquer la procédure en production.
Lorsque l'essai, la sauvegarde et la procédure de retour arrière sont validés, répétez la même commande sans --dry-run, d'abord en staging. Pour la production, créez un nouvel export, arrêtez les écritures, exécutez exactement la commande validée et vérifiez les liens, widgets, menus, blocs et journaux d'erreurs avant de rouvrir le site.
Si la validation échoue, maintenez les écritures arrêtées et restaurez wp-antes-reemplazo.sql. Confirmez que le site revient à son état antérieur avant de retirer le mode maintenance.
Alternatives avec interface
WordPress dispose d'extensions permettant d'effectuer ces tâches via une interface graphique, en définissant la recherche, le remplacement et les tables concernées. Elles sont plus lentes que WP-CLI sur les bases volumineuses, mais doivent elles aussi préserver correctement les données sérialisées.
Avec ces extensions aussi, l'export, l'essai en staging, l'aperçu et la sélection explicite des tables sont obligatoires. N'utilisez pas une option globale sans vérifier sa portée.
Une option avec aperçu est :
Si vous changez tout le domaine
L'exemple ne modifie que post_content ; il ne change ni les réglages, ni les widgets, ni les menus, ni les tables des extensions. Inventoriez ces emplacements et préparez la portée correspondante. Ne remplacez pas automatiquement la colonne guid : ce n'est pas une URL de navigation. Dans un WordPress multisite, vérifiez chaque site et la configuration du réseau avant d'élargir la commande.
Consultez les options de wp search-replace. Pour d'autres applications, utilisez un outil qui connaît leur format : WP-CLI ne rend pas compatible une base étrangère à WordPress.
Cela peut aussi vous aider
- Arrêter des requêtes MySQL en cours d'exécution Identifiez les requêtes MySQL lentes ou bloquées et distinguez l'arrêt d'une requête de la fermeture...
- Cloner une base de données Dupliquez une base MySQL en créant d'abord la destination et ses privilèges dans cPanel, puis en cop...
- Connexion distante et sécurisée au serveur MySQL Protégez une connexion MySQL distante grâce à un tunnel SSH et configurez séparément les identifiant...
- Consulter la version de MySQL et vérifier la compatibilité Identifiez la version réelle du serveur MySQL qu'utilise votre application, vérifiez la compatibilit...
Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.