¿Cómo puedo cambiar una URL dentro de un campo en MySQL?

5 minutos de lectura

Tengo una tabla llamada “wp-posts” con un campo “post-content”. Este campo contiene el texto de las publicaciones de blog. Me gustaría cambiar todos los registros para reemplazar una URL por otra.

Imagina que puedo tener cosas como:

Esta es una prueba y en algún lugar hay algo como oldurl.com/algo”>un enlace.”

quiero que sea

Esta es una prueba y en algún lugar hay algo como nuevaurl.com/algo”>un enlace.”

Necesito poder cambiar esto para cada registro en mi tabla sin tener que abrir cada publicación en WordPress y cambiarlas a mano. tiene que haber una manera de hacer esto

Esto se puede lograr fácilmente con una declaración SQL simple usando MySQL’s replace() función. Antes de hacer eso, definitivamente debe hacer un volcado de la base de datos o lo que sea que use para las copias de seguridad. No es solo que es The Right Thing To Do™, sino que si comete un error en su sustitución, puede resultar difícil deshacerlo (sí, puede retroceder, pero es posible que solo descubra su error más adelante).

Para crear un volcado de base de datos desde MySQL, puede ejecutar algo como esto:

mysqldump -h hostname -u username -p databasename > my_sql_dump.sql

Dónde (y probablemente lo sepa, pero en aras de la exhaustividad para las generaciones futuras…) —

  • nombre de host es un marcador de posición para el nombre de host de la base de datos. Si el servidor de la base de datos se está ejecutando en su propia máquina, entonces puede usar “localhost” o simplemente dejar el “-h nombre de host” por completo.
  • nombre de usuario es un marcador de posición para el usuario con permiso para ejecutar un volcado en la base de datos. Suele ser un administrador, pero si se trata de una base de datos compartida, podría ser simplemente usted.
  • nombre de la base de datos es el nombre de toda la base de datos que contiene sus tablas. (Tenga en cuenta que “-p” no tiene nada que ver con el nombre de esta base de datos. “-p” indica que MySQL debe solicitarle una contraseña para iniciar sesión).

Ahora que lo solucionamos, puede iniciar sesión en la base de datos MySQL usando:

mysql -h hostname -u username -p databasename

Y simplemente ejecute esta declaración:

UPDATE `wp-posts` SET `post-content` = REPLACE(`post-content`, "http://oldurl.com", "http://newurl.com");

¡Y eso debería hacerlo!

Si comete un error, a menudo puede volver a ejecutar la declaración con el texto original y el nuevo invertidos (si el texto nuevo, en su caso, la nueva URL, no existía en el texto antes de que hiciera el reemplazo). A veces esto no es posible dependiendo de cuál sea el texto nuevo (nuevamente, no es probable en su caso). De todos modos, siempre puede intentar recuperar el volcado de sql:

cat my_sql_dump.sql | mysql -h hostname -u username -p databasename

Y voila.

  • ¡Trabajado como un encanto! ¡¡¡Gracias!!! Y gracias por las instrucciones detalladas! ¡Ahora me encanta Stack Overflow!

    –Jerome Elkins

    9 de junio de 2009 a las 14:42

  • solo para que conste, en caso de que alguien venga aquí queriendo ciega y audazmente (¡no, aventureramente!) Copiar y pegar esta consulta, wp-posts estarán wp_posts y ambos post-contentserá post_content.

    – Adán Rowe

    3 mayo 2017 a las 13:07

Utilizar el reemplazar función de cadena en MySQL:

UPDATE MyTable SET textfield = REPLACE(textfield, "http://oldurl.com/", "http://newurl.com")

Hay un práctico complemento de WordPress que he usado para buscar y reemplazar en las páginas de publicaciones con grep:

http://urbangiraffe.com/plugins/search-regex/

recientemente usé http://wordpress.org/extend/plugins/buscar-y-reemplazar/ para actualizar un sitio desde un servidor de desarrollo al servidor público. Usé el complemento para cambiar todas las URL de las imágenes de su formato “00.00.00.00/~user/” a su formato “example.com”.

Funcionó perfectamente.

Por supuesto, asegúrese de hacer una copia de seguridad de la base de datos primero en caso de que cometa un error tipográfico durante el proceso.

Hay algunos lugares para resolver eso.

  1. Copia de seguridad de su base de datos
  2. Intenta usar la utilidad interna de WordPress
  3. Buscar coincidencias
  4. Escriba su propia búsqueda y reemplazo

Procedimiento

1. Haz una copia de seguridad de tu base de datos

Generalmente voy así:

mysqldump -u dbuser -p'dbpassword' --complete-insert --default-character-set=utf8 databasename > /home/renoirb/backups/databasename.sql

Incluso tengo esto en un crontab en mi propio servidor. Pero ese es otro tema.

2. Intenta usar la utilidad interna de WordPress

WordPress tiene su propia utilidad para el caso. La mayoría de las veces, solo se puede hacer con él.

Simplemente agregue a su tema functions.php (ver la documentación de wordpress) archivar la siguiente línea:

update_option('siteurl','http://local.workspace/');
update_option('home','http://local.workspace/');

Suponiendo que ya está ejecutando el tema que tiene ese particular functions.php expediente.

Ejecute el sitio, actualizando la página.

Luego, ¡comenta las líneas!

Ya no los necesitarás.

De lo contrario, pueden actualizar la configuración de su base de datos en cada carga de página.

Si no es suficiente, continúa…

3. Buscar coincidencias

Yo personalmente uso Administrador en mi implementación, es un reemplazo ligero de un archivo para PHPMyAdmin.

por qué sugiero Administrador? Tiene una buena función de búsqueda en todas las bases de datos que encuentro bastante útil en nuestro caso de uso.

Es un cuadro de búsqueda, etiquetado: “Buscar en tablas de datos”.

4. Escriba su propia búsqueda y reemplace

UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, "http://url", "https://url");
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, "http://url", "https://url");
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, "http://url", "https://url");

Tenga en cuenta que, en mi caso, estaba migrando TODAS mis URL de NO HTTPS a HTTPS.

Espero que haya sido útil

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad