2009-05-07 15 views
16

Tengo una cadena que está contenida dentro de una instalación de wordpress (el nombre de un servidor) miles de veces, en múltiples columnas, registros y tablas.¿Cómo buscar y reemplazar todas las instancias de una cadena dentro de una base de datos?

Me gustaría actualizarlo con la ubicación de otro servidor: estamos trasladando el contenido.

Así que la fuente sería algo así como http://my-server1/some/link/to/something, y me gustaría reemplazarlo por http://my-other-server/some/link/to/something. Básicamente, estoy buscando repetir este proceso para cada instancia de http://my-server1.

¿Hay alguna manera fácil de hacerlo en MySQL? ¿Una herramienta? ¿O, por desgracia, tengo que actualizar cada registro de forma problemática?

Gracias,

+0

tener este tipo de datos (los datos deben ser por lo menos absoute caminos) en una base de datos es una idea bastante mala, ya que debes cambiarla cuando te mudes. ¿Por qué tiene la URL del sitio en una instalación de Wordpress de todos modos? Debe haber solo el único sitio global pref. –

Respuesta

34

Un crudo (pero efectiva) manera de hacerlo sería para volcar el esquema en un archivo, se aplican cuidadosamente la búsqueda y reemplazo y luego volver a importar.

Como cuestión de hecho lo hice hoy :)

+0

Me alegro de que ayude. Solo asegúrese de aplicar el reemplazo cuidadosamente y solo cambie lo que realmente desea. – cherouvim

+0

¿Qué hay de la situación cuando tengo que realizar al menos 2000 reemplazar en lugar de uno? ¿Podrias ayudarme por favor? – SachinKRaj

+0

@SachinKRaj: me gustaría escribir con mucho cuidado un script de shell con 2000 'declaraciones sed'. – cherouvim

1

También hay un plugin para Wordpress llamado Search Regex, que permite ejecutar grep búsqueda y reemplazo a través de la base de datos.

14

Encontré esto en una búsqueda de Google, pero esto puede ayudar a algunas personas. Si conoces las tablas y columnas (se puede encontrar esta utilizando la búsqueda de comodín en phpMyAdmin),

ACTUALIZACIÓN nombre_tabla SETCOLUMN_NAME = SUSTITUIR (COLUMN_NAME, 'http: // oldsite. com ',' http://newsite.com ');

Reemplazar negrita piezas propias.

Si tuviera una base de datos grande podría aplicar esto en una secuencia de comandos que podría recorrer cada tabla y columna.

+0

'replace()' el trabajo en conjunto de datos serializados así? –

9

El método de volcado de MySQL sería la mejor opción si está contento de volver a importar toda la base de datos. Para cualquiera que no quiera hacer esto, la instalación principal de WordPress solo consiste en 11 tablas, de las cuales algunas son columnas de contenido, por lo que sería muy fácil reemplazarlas por columnas. Asumiendo que no tienen un montón de mesas de plugin incluir su enlace o una cadena de esto sería su SQL:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx'); 
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx'); 
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx'); 
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx'); 
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx'); 
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
+0

Esta es en realidad una mejor respuesta. No sé por qué se selecciona otra respuesta como correcta y teniendo tantos votos – Parag

2

Su pregunta ha sido publicado en 2009 y durante ese año a otro tipo desarrollado una herramienta básica php para buscar una en todas las tablas de una determinada base de datos. Opcionalmente también puede reemplazar todas sus ocurrencias con una cadena diferente.

Aún después de 5 años (al momento de escribir) el uso de esta herramienta contra una instalación de Wordpress es efectivo y mucho más fácil en mi opinión que usar un volcado de mysql (aunque es posible que desee crear un volcado también antes de ejecutar secuencia de comandos para fines de copia de seguridad).

Puede encontrar más información en el blog de su autor Eric Amundson y en la página de la plataforma de lanzamiento del proyecto MySQL Search & Replace

No creo que todavía está buscando una respuesta después de todo este tiempo, pero decidí También publico mi sugerencia, con la esperanza de que pueda ayudar a otra persona que aparezca aquí en el futuro y que aún busque una solución a este problema.

0

Addittionally a la respuesta de Brad Larson - para establecer variables como:

SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by"; 

Y luego usarlo como sigue:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by); 
Cuestiones relacionadas