una - update replace mysql




¿Cómo buscar y reemplazar todas las instancias de una cadena dentro de una base de datos? (5)

Tengo una cadena que está contenida dentro de una instalación de wordpress (el nombre de un servidor) miles de veces, en varias columnas, registros y tablas.

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

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

¿Hay una manera fácil de hacer esto en MySQL? ¿Una herramienta? ¿O lamentablemente tengo que actualizar cada registro de manera problemática?

Gracias,


Además de 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 de la siguiente manera:

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

El método de volcado de MySQL sería la mejor opción si está dispuesto a volver a importar toda la base de datos. Para cualquier persona que no quiera hacer esto: la instalación principal de WordPress solo consiste en 11 tablas, de las cuales pocas son columnas de contenido, por lo que hacer una sustitución por columna sería igualmente fácil. Suponiendo que no tenga un montón de tablas de complementos que hagan referencia a su enlace o cadena, este 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');

La REEMPLAZO de MySQL o reemplazar la cadena manualmente en un archivo sql o db en WordPress no es una buena manera. WordPress usa campos serializados que pueden romperse si reemplaza alguna cadena en ellos (ese fue mi caso)

Usé el plugin Better Search Replace que me funcionó perfectamente


Su pregunta se publicó en 2009 y durante ese año otro tipo desarrolló una herramienta básica de php para buscar una cadena en todas las tablas de una determinada base de datos. Opcionalmente, también puede reemplazar todas sus apariciones con una cadena diferente.

Aún después de 5 años (al momento de escribir), el uso de esta herramienta en 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 antes de ejecutar el script para realizar una copia de seguridad). ).

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

No creo que sigas buscando una respuesta después de todo este tiempo, pero también decidí publicar mi sugerencia, con la esperanza de que pueda ayudar a que alguien más aparezca aquí en el futuro que aún busque una solución a este problema.


Una forma burda (pero efectiva) de hacerlo sería volcar el esquema en un archivo, aplicar cuidadosamente la búsqueda y reemplazo y luego volver a importar.

De hecho lo hice hoy :)





replace