¿Cómo reemplazar el nombre de dominio en una base de datos de Wordpress?

12

Tengo una base de datos de Wordpress que se instaló en un entorno de desarrollo ... por lo tanto, todas las referencias al sitio tienen una dirección IP fija (por ejemplo, 192.168.16.2). Ahora, tengo que migrar esa base de datos a una nueva instalación de Wordpress en un hosting. El problema es que el volcado de SQL contiene muchas referencias a la dirección IP, y tengo que reemplazarlo por: my_domain.com.

Podría usar sedo algún otro comando para cambiar eso desde la línea de comando, el problema es que hay muchos datos de configuración que usan JSON. ¿Y qué? Bueno, como saben, las matrices JSON usan cosas como: s:4:para saber cuántos caracteres tiene un elemento y, por lo tanto, si solo reemplazo la IP con el nombre de dominio, los archivos de configuración se dañarán.

Hace unos años, utilicé una aplicación para Windows que permite cambiar valores en una base de datos y se encarga de las matrices JSON. Desafortunadamente, olvidé el nombre de la aplicación ... así que la pregunta es: ¿conoces alguna aplicación que me permita hacer lo que quiero?

Cristian
fuente
1
Esta no es una respuesta completa, pero podría ayudarlo a buscarla: los datos que está viendo no tienen formato JSON. JSON no (normalmente) almacena tipos de valores y longitudes como esa. Lo que estás viendo son datos SERIALIZADOS. Una búsqueda en Google para "mysql replace serialized" produce esta página, lo que podría ayudar: davidcoveney.com/…
MathSmath
Oye, tu comentario es la única respuesta que me fue útil ... muévelo a una respuesta para marcarlo como correcto. ¡Gracias!
Cristian
Me alegro de que haya ayudado! Lo publiqué como respuesta.
MathSmath

Respuestas:

7

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

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

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

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

  • homey siteurlopciones que controlan dónde piensa WP que está el sitio;
  • Publicar GUID, estos parecen enlaces, pero en realidad no lo son, solo identificadores. No estoy absolutamente seguro de que sean irrelevantes, pero tuve un cambio de URL en la pila de prueba y nunca me molesté en actualizarlos.
  • enlaces en cuerpos de correos;
  • posiblemente enlaces en la configuración del complemento.
Rarst
fuente
Hay bastantes pasos. Después de que mv olddir.com newdir.comnecesite volver a configurar su servidor web, reinicie el servidor web. Siga las instrucciones del códice aquí y luego podrá iniciar sesión como administrador. Eso debería comenzar :-)
PJ Brunet
6

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

Uso un servidor de desarrollo en mi PC todo el tiempo para importar fuentes de datos y tienen la URL adjunta a las publicaciones en la línea de http: // localhost / testsite / post-name / y nunca ha causado un problema.

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

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

David

David Law
fuente
Hay algunos complementos, como ContactForm7, que también guarda el nombre de dominio dentro de una cadena serializada, entre otras variables de configuración. Cuando modifica una cadena serializada, puede corromperse si cambia su longitud, por lo que, de hecho, a veces, hay más cosas que cambiar que solo dos configuraciones.
Cristian
3

Puede establecer estos valores con constantes en wp-config.php. Después de esto, puede, cuando lo desee, cambiar las entradas en la base de datos a través del complemento Adminer. Escriba esto en wp-config.phpy los valores en el DB no son relevantes:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
bueltge
fuente
2

Consultas SQL simples: no se requieren REPLACE complicados:

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'siteurl';

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'home';

Use aquellos con PHPMyAdmin o cualquier otra forma que prefiera para acceder a la base de datos.

marca
fuente
2

Asegúrese de tener seleccionada la nueva base de datos, luego ejecute algunas actualizaciones de sql y comandos de reemplazo en las tablas en particular, wp_options, wp_posts, wp_postmeta.

Use el código que se muestra a continuación e intercambie sus URL antiguas y nuevas, sin barras diagonales finales. Además, si es necesario, cambie los valores del prefijo de la tabla donde corresponda (es decir, 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');
usuario129645
fuente
1

Esta es una pregunta muy antigua, pero como la encontré mientras buscaba algo más, pensé agregarla para referencia futura.

Creo que la forma más simple y completa de hacer esto es mediante searchreplacedb2.php. Se puede encontrar 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 de entornos de desarrollo a entornos en vivo en mis sitios de WordPress.

¡Solo asegúrese de eliminarlo de un servidor público una vez que haya terminado!

MatthewLee
fuente
0

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

Recientemente, moví mi sitio al servidor de producción y me enfrento a la misma situación. Necesito actualizar la URL del sitio porque WordPress almacenó 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.

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 necesita reemplazar la URL de su sitio del antiguo nombre de dominio al nuevo dominio y luego ejecutar la consulta en MySQL usando PHPMYADMIN.

Para más referencia, puede leer este tutorial.

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

Renish Khunt
fuente