Qué consulta SQL usar para hacer un simple buscar y reemplazar

25 ene 2011, 13:09:19
Vistas: 173K
Votos: 29

Cada vez que creo un nuevo sitio web, primero creo un sitio de staging en un subdominio como "stage.domain-name.com".

Después de que todo funciona correctamente, exporto la base de datos, la abro en notepad++ y hago un buscar/reemplazar de "subdomain.domain-name.com" y lo reemplazo por "domain-name.com"... finalmente la importo en una nueva base de datos para el sitio en producción.

Mi pregunta es... ¿qué consulta SQL necesitaría ejecutar si solo quisiera hacer este simple buscar/reemplazar en toda la base de datos usando phpMyAdmin?

-CH

4
Comentarios

Si no estás familiarizado con las consultas, prueba el plugin Search and Replace, http://wordpress.org/extend/plugins/search-and-replace/

t31os t31os
26 ene 2011 16:19:12

¿Por qué no usar la funcionalidad de WordPress para actualizar la URL?

http://codex.wordpress.org/Moving_WordPress detalla todo

Alex Older Alex Older
18 nov 2014 17:35:20

Existe un plugin para esto. Permite un uso cómodo del backend y también reemplaza la URL en el contenido de las publicaciones y otros campos, si así lo deseas: https://wordpress.org/plugins/better-search-replace/

simonthesorcerer simonthesorcerer
23 jul 2015 23:33:19

hacer esto con una consulta SQL corromperá cualquier valor serializado de PHP almacenado en la base de datos, rompiendo el sitio si la nueva URL tiene una longitud diferente a la anterior

Tom J Nowell Tom J Nowell
3 sept 2021 17:03:43
Todas las respuestas a la pregunta 7
7
42

Mejores opciones para hacerlo en opciones, publicaciones, contenido de publicaciones y metadatos:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

También puedes consultar Búsqueda de datos usando phpMyAdmin y MySQL | Packt Publishing. Y Search RegEx es un buen plugin de WP para buscar y reemplazar con Grep en todas las publicaciones y páginas.

Actualización 16/06/2015: Usar la herramienta enlazada en la siguiente oración es mucho mejor, ya que un simple buscar/reemplazar como el anterior en un volcado de base de datos romperá los datos serializados. Revisa interconnectit.com WordPress Serialized PHP Search Replace Tool. De esta manera, no romperás los datos serializados y no necesitarás ejecutar RegEx en el contenido de las publicaciones, ya que el script de interconnect cambia las URLs en todas partes. Yo uso esa herramienta todo el tiempo para migrar sitios a diferentes dominios, o simplemente para hacer un cambio global de http a https y forzar SSL sin plugins y cambiar todas las URLs en el contenido para evitar errores de elementos inseguros.

Edición 02/09/21 WP CLI también es una gran herramienta, y maneja correctamente los datos serializados. Consulta https://developer.wordpress.org/cli/commands/search-replace/

25 ene 2011 16:02:41
Comentarios

Nunca cambies el guid - incluso si cambias a un nuevo dominio. Se utiliza para identificar de forma única la publicación, ya que el ID puede cambiar si las publicaciones se exportan/importan a una nueva base de datos. Entre otras cosas, los lectores RSS utilizan el GUID para saber si un artículo específico ha sido leído o no. Cambiar el guid hará que efectivamente se vuelvan a publicar todos tus artículos.

Taylor Dewey Taylor Dewey
16 jun 2012 20:42:45

@taylordewey dijo: "Nunca cambies el guid..." Tonterías.

markratledge markratledge
17 jun 2012 21:55:04

@songdogtech ¿Te importaría explicar por qué son tonterías?

shea shea
6 mar 2013 06:39:48

Si estás cambiando de dominio, simplemente no tenés opción y tenés que cambiar los GUIDs. Las consecuencias en los lectores RSS son un precio mínimo a pagar.

markratledge markratledge
6 nov 2015 22:20:50

¿Por qué alguien tendría que cambiar el GUID?

kaiser kaiser
11 ago 2016 19:36:48

A pesar de que los GUID contienen una URL, no se usan para crear enlaces (por ejemplo en menús) cuando se hace referencia a posts. Por lo tanto no cambiarlos es perfectamente aceptable

Chris Chris
27 may 2017 15:08:59

Esto no funcionará para datos serializados. Podría dañar por completo alguna configuración del tema. En efecto, utiliza una herramienta como la de Interconnect/IT.

Christian Lescuyer Christian Lescuyer
17 oct 2017 20:52:24
Mostrar los 2 comentarios restantes
3
15

La tabla donde se guarda tu URL es wp_options. Debes hacer una actualización en las columnas que usan la URL de tu sitio:

UPDATE TABLE wp_options SET option_value = "nuevo dominio" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "nuevo dominio" WHERE option_name = "home"

Podría faltar algún valor, pero cada vez que realices este proceso de buscar/reemplazar nuevamente, podrás notar los valores y tablas que deberían actualizarse y agregarlos a este script.

El Codex de WordPress tiene una buena guía sobre cómo cambiar la URL de un sitio, quizás te sea más útil: Cambiando la URL del sitio

25 ene 2011 13:25:54
Comentarios

¿No hay una forma de hacer un buscar/reemplazar en toda la base de datos? En otras palabras... noté que necesito reemplazar las URLs en muchos lugares diferentes, incluyendo la biblioteca de medios... Si hubiera un buscar/reemplazar para toda la base de datos que cubriera esencialmente todos los campos, esto resolvería el problema. Gracias por tu ayuda.

NetConstructor.com NetConstructor.com
25 ene 2011 13:28:01

Revisa ese nuevo enlace que añadí en la respuesta. Creo que ese sería el camino a seguir.

Fernando Briano Fernando Briano
25 ene 2011 13:29:08

Esto no funcionará para datos serializados. Podría romper completamente alguna configuración del tema.

Christian Lescuyer Christian Lescuyer
17 oct 2017 20:52:40
2
10

Este es un excelente script listo para usar que yo utilizo y funciona perfectamente con los arrays serializados que WordPress emplea para almacenar opciones. Solo asegúrate de eliminarlo de tu servidor remoto cuando hayas terminado porque representa un ENORME riesgo de seguridad.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

2 ago 2011 22:47:12
Comentarios

No sé por qué me dieron un -1. Este script es mucho mejor que una sentencia SQL. ¿Comentarios por favor?

lancemonotone lancemonotone
3 ago 2011 17:10:14

una herramienta que la gente que no sabe SQL puede usar, molesta a aquellos que escriben en SQL

Jon Jon
23 jun 2013 21:54:27
1

Para esto uso WP-CLI porque lo considero el más fácil y se encarga de los datos serializados.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

También existe una opción que escribe tus cambios en un archivo SQL en lugar de manipular directamente la base de datos:

wp search-replace foo bar --export=database.sql

27 abr 2016 11:41:58
Comentarios

sin duda la solución más robusta y rápida. wp-cli salva el día una vez más

ryanrain ryanrain
19 jun 2018 21:02:26
3

no es necesario hacer esto, puedes usar rutas relativas.

cuando estés enlazando algo en lugar de subdominio.algo.com/imagen.jpg - usa /imagen.jpg por ejemplo

de esta manera no tendrás el problema desde el principio.

de lo contrario, para una sentencia de actualización en mysql puedes usar

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘texto a buscar’, ‘texto de reemplazo’);
25 ene 2011 13:45:36
Comentarios

Gracias... sí, lo haré la próxima vez. ¿La sentencia SQL hace un buscar y reemplazar en toda la base de datos (incluyendo todas las tablas)?

NetConstructor.com NetConstructor.com
25 ene 2011 14:03:52

@NetConstructor.com La sentencia SQL que mireille te dio arriba es el comando genérico de MySQL para reemplazar una cadena en un campo específico de una tabla específica. Si intentaste ejecutar esta sentencia exactamente como estaba escrita, no funcionaría. Para que este comando funcione, necesitarías cambiar TABLE_NAME & FIELD_NAME por un campo y tabla reales utilizados por WordPress.

Manzabar Manzabar
26 ene 2011 05:15:06

Ten en cuenta también que incluso si deseas usar rutas relativas, muchas partes de WordPress tienden a insertar automáticamente rutas completas. Para que esto funcione realmente, un plugin como: https://wordpress.org/plugins/root-relative-urls/ es muy, muy útil

benz001 benz001
15 sept 2014 08:03:09
1

Para cambiar el dominio de WordPress, algo que necesitamos con frecuencia, puede ser para poner el sitio en producción desde localhost: Esta es una lista completa de consultas de actualización:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • También debemos agregar otras tablas que no son predeterminadas en WP si es necesario.

ACTUALIZACIÓN: Search Replace DB versión 3.1.0 es una herramienta intuitiva de interfaz para desarrolladores, que te permite realizar búsquedas y reemplazos en toda la base de datos, sin dañar cadenas u objetos serializados en PHP.

24 nov 2011 18:09:00
Comentarios

Esto no funcionará para datos serializados. Podría dañar completamente la configuración del tema.

Christian Lescuyer Christian Lescuyer
17 oct 2017 20:50:59
1
-2

En realidad, no necesitas usar una consulta SQL, solo algunos ajustes en los archivos wp-config.php y functions.php de tu tema. Revisa este tema en el Codex de WordPress: https://codex.wordpress.org/Changing_The_Site_URL

6 may 2015 14:10:22
Comentarios

Esto no es correcto. WordPress lamentablemente almacena algunas URLs en la base de datos como texto.

s_ha_dum s_ha_dum
30 sept 2015 17:03:25