Cómo reemplazar el nombre de dominio en una base de datos de WordPress
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?
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
ysiteurl
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.

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 :-)

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/

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

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

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');

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

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.

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';

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.

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');

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.

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!

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/

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');
