Consulta de MySQL para actualizar masivamente el HTML de los posts de Drupal

Si tienes un sitio de Drupal con muchas publicaciones, o muchos nodos, te puede pasar que necesites hacer un cambio en el contenido de muchos de estos nodos.

Por ejemplo, la URL de un sitio al que has enlazado mucho ha cambiado, y tienes enlaces rotos o, aún peor, ha cambiado la URL de un sitio que aloja muchas imágenes que tú enlazas en tus posts, y ahora tus publicaciones se muestran sin imágenes.

Solucionar errores de enlaces rotos con SQL

Auditoría de SEMrush para localizar enlaces rotos, entre otros errores

 

Una opción es ir post a post cambiando todos los enlaces, pero si tienes muchos tanto localizarlos como cambiarlos te puede llevar mucho tiempo.

Otra opción más rápida, aunque también más arriesgada, si el patrón de cambio está claro, básicamente si es cambiar un texto determinado por otro, es hacer el 'replace' directamente en la base de datos, modificando la tabla que almacena el contenido de los nodos, es decir, el 'body' y el 'teaser' de Drupal.

¿Cómo hacerlo con MySQL? Yo te recomiendo hacerlo en estos sencillos pasos:

  • Antes de tocar nada hazte con una consulta CTAS una copia de la tabla que vas a modificar, por si algo sale mal (en el caso de Drupal es la tabla node_revisions):​
SQL> create table node_revisions_old as
     select * from node_revisions;
  • Localiza los nodos que vas a modificar antes de tocar nada para asegurarte de que son los que esperas:
SQL> select * from node_revisions where body like '%http://dominio.obsoleto%';
  • Actualiza el teaser y el body de esos nodos con la ayuda de la función replace de MySQL:
SQL> update node_revisions 
     set teaser=replace(teaser,'http://dominio.obsoleto','http://dominio.actual') 
     where teaser like '%http://dominio.obsoleto%';

SQL> update node_revisions 
     set body=replace(body,'http://dominio.obsoleto','http://dominio.actual') 
     where body like '%http://dominio.obsoleto%';

Y nada más, vuelve a tu sitio de Drupal y comprueba que ahora los links funcionan y ya no están rotos, que ya se ven bien las imágenes, o que se ha cambiado el texto o incluso el código HTML que tú querías en todos los posts.

Finalmente advertir que es mejor hacerlo de esta manera sólo cuando se tenga dominado el uso de SQL, y esté justificado para evitar mucho trabajo, ya que hacer directamente updates sobre las tablas del CMS puede ser muy útil, pero también muy peligroso.

Y siempre antes de nada tener localizado un backup completo, y recomiendo hacer además el backup de las tablas que se van a modificar, por si acaso.

Y si en lugar de Drupal utilizas otro CMS, como Joomla o Wordpress, pues el proceso va a ser más o menos el mismo, pero con diferentes tablas, claro :)