Как искать и заменять все экземпляры строки в базе данных?

У меня есть строка, содержащаяся внутри установки wordpress (имя сервера) тысячи раз, по нескольким столбцам, записям и таблицам.

Я хотел бы обновить его с местоположением другого сервера - мы перемещаем содержимое.

Итак, источник будет что-то вроде http://my-server1/some/link/to/something, и я бы хотел заменить его http://my-other-server/some/link/to/something. Я по существу стараюсь повторить этот процесс для каждого экземпляра http://my-server1.

Есть ли простой способ сделать это в MySQL? Инструмент? Или мне, к сожалению, приходится обновлять каждую запись проблематично?

Спасибо,

Ответ 1

Грубым (но эффективным) способом сделать это было бы сбросить схему в файл, тщательно применить поиск и замену, а затем повторно импортировать.

На самом деле я сделал это сегодня:)

Ответ 2

Пришел к поиску в google, но это может помочь некоторым людям. Если вы знаете таблицы и столбцы (вы можете найти это, используя поиск подстановочных знаков в phpMyAdmin),

UPDATE имя_ таблицы SET column_name= REPLACE ( имя_столбца, ' http://oldsite.com', ' http://newsite.com');

Замените жирные части своим.

Если у вас была большая база данных, вы можете применить ее к script, которая могла бы проходить через каждую таблицу и столбец.

Ответ 3

Метод дампа MySQL будет лучшим вариантом, если вы захотите повторно импортировать всю базу данных. Для тех, кто этого не хочет - установка ядра WordPress на самом деле состоит из 11 таблиц, из которых немногие являются столбцами контента, поэтому выполнение замены по столбцу будет одинаково простым. Предполагая, что у вас нет загрузок таблиц плагинов, ссылающихся на вашу ссылку или строку, это будет ваш 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');

Ответ 4

Ваш вопрос был опубликован в 2009 году, и в течение этого года другой парень разработал базовый php-инструмент для поиска строки во всех таблицах определенной базы данных. При желании вы также можете заменить все его вхождения на другую строку.

По-прежнему через 5 лет (на момент написания) использование этого инструмента против установки Wordpress является эффективным и намного проще, на мой взгляд, чем использование дампа mysql (хотя вам может понадобиться создать дамп также перед запуском script для резервного копирования).

Дополнительную информацию можно найти в блоге автора Эрик Амундсон и на стартовой странице проекта Поиск и замена MySQL

Я не верю, что вы все еще ищете ответ после всего этого времени, но я решил также опубликовать свой намек, надеясь, что он может помочь кому-то еще в этом будущем по-прежнему искать решение этой проблемы.

Ответ 5

Существует также плагин Wordpress под названием Search Regex, который позволяет запускать grep поиск и замену в базе данных.

Ответ 6

Допустимо ответ Брэда Ларсона - установить такие переменные, как:

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

И затем используйте его следующим образом:

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