Cómo reemplazar el nombre de dominio en una base de datos de WordPress

21 dic 2010, 22:54:53
Vistas: 46.7K
Votos: 17

Tengo una base de datos de WordPress que fue instalada en un entorno de desarrollo... por lo tanto, todas las referencias al sitio mismo tienen una dirección IP fija (por ejemplo 192.168.16.2). Ahora, necesito migrar esa base de datos a una nueva instalación de WordPress en un hosting. El problema es que el volcado SQL contiene muchas referencias a la dirección IP, y necesito reemplazarla con: mi_dominio.com.

Podría usar sed u otro comando para cambiarlo desde la línea de comandos, pero la preocupación es que hay muchos datos de configuración que usan JSON. ¿Y qué? Bueno, como sabes, los arrays JSON usan cosas como: s:4: para saber cuántos caracteres tiene un elemento, y por lo tanto, si simplemente reemplazo la IP con el nombre de dominio, los archivos de configuración se corromperán.

Hace algunos años usé una aplicación para Windows que permitía cambiar valores en una base de datos y se encargaba de los arrays JSON. Desafortunadamente, olvidé el nombre de la aplicación... así que la pregunta es: ¿conoces alguna aplicación que me permita hacer lo que necesito?

3
Comentarios

Esta no es una respuesta completa, pero podría ayudarte en tu búsqueda: los datos que estás viendo no están formateados en JSON. JSON normalmente no almacena tipos de valores y longitudes de esa manera. Lo que estás viendo son datos SERIALIZADOS. Una búsqueda en Google de "mysql replace serialized" muestra esta página, que podría ayudarte: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath MathSmath
21 dic 2010 23:10:09

Oye, tu comentario es la única respuesta que me fue útil... muévelo a una respuesta para marcarlo como correcto. ¡Gracias!

Cristian Cristian
22 dic 2010 14:39:25

¡Me alegra que te haya ayudado! Lo he publicado como respuesta.

MathSmath MathSmath
22 dic 2010 20:16:38
Todas las respuestas a la pregunta 11
1
11

El Codex tiene una guía decente: Cambiar la URL del sitio.

Básicamente hay varios lugares donde la URL importa o no tanto (puede que me falten algunos):

  • Las opciones home y siteurl que controlan dónde WP cree que está el sitio;
  • Los GUIDs de las publicaciones, que parecen enlaces pero realmente no lo son, solo son identificadores. No estoy completamente seguro de que sean irrelevantes, pero he cambiado URLs mucho en entornos de prueba y nunca me he molestado en actualizarlos.
  • Enlaces en el cuerpo de las publicaciones;
  • Posiblemente enlaces en las configuraciones de los plugins.
22 dic 2010 06:58:03
Comentarios

Hay varios pasos. Después de que mv olddir.com newdir.com necesitarás reconfigurar tu servidor web, reiniciar el servidor web. Sigue las instrucciones del codex aquí y luego deberías poder iniciar sesión como administrador. Eso debería ayudarte a comenzar :-)

Jay Brunet Jay Brunet
17 feb 2015 23:00:38
2

Los datos que estás viendo no están en formato JSON. JSON no (normalmente) almacena tipos de valores y longitudes de esa manera. Lo que estás viendo son datos SERIALIZADOS. Una búsqueda en Google de "mysql reemplazar serializado" muestra esta página, que podría ayudar: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

22 dic 2010 20:16:06
Comentarios

Gracias... Trabajé como desarrollador PHP durante 2 años. No puedo creer que olvidé la diferencia entre algo serializado y una cadena JSON.

Cristian Cristian
22 dic 2010 20:56:05

esto ahora tiene un repositorio en github: https://github.com/interconnectit/Search-Replace-DB

Lluís Lluís
22 jul 2021 09:15:50
0

Puedes establecer estos valores con las constantes en el archivo wp-config.php. Después de esto, podrás, cuando lo desees, cambiar las entradas en la herramienta de base de datos como 'PhpMyAdmin' o 'Adminer'.

Escribe esto en el wp-config.php y los valores en la base de datos no serán relevantes:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
22 dic 2010 00:02:59
1

Como mencionó Rarst anteriormente, solo hay dos configuraciones en la base de datos que NECESITAN ser modificadas. Después de importar la base de datos, inicio sesión en PHPMyAdmin y edito la base de datos directamente.

Utilizo un servidor de desarrollo en mi PC todo el tiempo para importar fuentes de datos y tienen la URL adjunta a las publicaciones algo así como http://localhost/testsite/nombre-del-post/ y nunca ha causado un problema.

Solía usar una búsqueda y reemplazo SQL hasta que me di cuenta de que no importaba. He migrado algunos sitios de un dominio a otro y cuando he tenido URLs absolutas en el contenido, uso la opción de búsqueda y reemplazo SQL.

update wp_posts set post_content = replace(post_content,'http://www.dominioantiguo/','http://www.dominionuevo/');

David

23 dic 2010 01:53:19
Comentarios

Hay algunos plugins, como ContactForm7, que también guardan el nombre del dominio dentro de una cadena serializada, junto con otras variables de configuración. Cuando modificas una cadena serializada, puede corromperse si su longitud cambia, así que en realidad, a veces, hay más cosas que cambiar que solo dos configuraciones.

Cristian Cristian
23 dic 2010 03:03:17
0

Este es un recurso increíble que tengo guardado y al que vuelvo una y otra vez http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you-knew-earlier/

Ellos indican

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';  
21 dic 2010 23:51:47
0

Consultas SQL simples - no se requieren cosas complicadas como REPLACE:

update wp_options set option_value = 'http://mi-nuevo-dominio.com' where option_name = 'siteurl';

update wp_options set option_value = 'http://mi-nuevo-dominio.com' where option_name = 'home';

Usa estas consultas con PHPMyAdmin o cualquier otra forma que prefieras para acceder a la base de datos.

23 dic 2010 04:31:57
0

Asegúrate de tener seleccionada la nueva base de datos, luego ejecuta algunas actualizaciones SQL y comandos de reemplazo en las tablas, notablemente en wp_options, wp_posts, wp_postmeta.

Utiliza el código como se muestra a continuación y sustituye tus URLs antiguas y nuevas, sin barras al final. También, si es necesario, cambia los valores del prefijo de las tablas donde corresponda (ej. wp_ )

UPDATE wp_options SET option_value = replace(option_value, 'http_www.oldurl', 'http_www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';    
UPDATE wp_posts SET guid = replace(guid, 'http_www.oldurl','http_www.newurl');    
UPDATE wp_posts SET post_content = replace(post_content, 'http_www.oldurl', 'http_www.newurl');    
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http_www.oldurl','http_www.newurl');
14 oct 2017 20:31:12
0

Echa un vistazo a mi respuesta a esta pregunta:

Aborda tus problemas con la limpieza de datos y puede personalizarse para necesidades específicas de migración de datos utilizando también hooks.

Espero que te ayude.

22 dic 2010 07:16:36
0

Esta es una pregunta bastante antigua, pero como me la encontré mientras buscaba otra cosa, pensé en añadir esto para futuras referencias.

Creo que la forma más simple y completa de hacer esto es usando searchreplacedb2.php. Puede encontrarse aquí: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ junto con una explicación de su uso.

Definitivamente me ha ahorrado mucho tiempo al migrar desde entornos de desarrollo a producción en mis sitios WordPress.

¡Solo asegúrate de eliminarlo de un servidor público una vez que hayas terminado!

19 abr 2013 20:02:14
0

Veo que quieres mover tu sitio WordPress del entorno de desarrollo a un nuevo servidor o servidor de producción.

Recientemente, he migrado mi sitio al servidor de producción y me enfrenté a la misma situación. Necesito actualizar la URL del sitio porque WordPress almacena la URL del sitio en la base de datos.

Encontré una buena consulta MySQL con la que puedo cambiar fácilmente la URL directamente desde la base de datos, como:

SET @search := "http://olddomain.com";
SET @replace := "http://newdomain.com";

UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "siteurl";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "home";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "product_list_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "shopping_cart_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "checkout_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "widget_text";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerImageLogo";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "cunjo_plugin_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "wpsr_socialbt_data";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "issuem";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "_transient_dgxdonate_t70pbg1htu_1396322372";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "dgx_donate_log";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerBackgroundImage";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "transact_url";
UPDATE `wp_postmeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_usermeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_posts` SET `guid`=REPLACE(guid, @search, @replace);
UPDATE `wp_posts` SET `post_content`=REPLACE(post_content, @search, @replace);

Solo necesitas reemplazar la URL de tu sitio del dominio antiguo al nuevo y luego ejecutar la consulta en MySQL usando PHPMYADMIN.

Para más referencia, puedes leer este tutorial.

https://tryvary.com/wordpress-change-url-in-database-using-mysql-query/

27 mar 2020 05:35:07
0

Asegúrate de estar conectado con la nueva base de datos, luego ejecuta algunas consultas SQL.

Utiliza el código como se muestra a continuación y reemplaza tus URLs antiguas y nuevas, sin barras diagonales al final. También, si es necesario, cambia los valores del prefijo de las tablas donde corresponda (ej. wp_ )

UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'https://oldomain.com', 'https://newdomain.com'),
    guid = REPLACE(guid, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_options 
SET option_value = REPLACE(option_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_commentmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_comments 
SET comment_content = REPLACE(comment_content, 'https://oldomain.com', 'https://newdomain.com');
13 ene 2025 18:34:10