Как искать и заменять все экземпляры строки в базе данных? - PullRequest
21 голосов
/ 07 мая 2009

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

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

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

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

Спасибо,

Ответы [ 7 ]

38 голосов
/ 07 мая 2009

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

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

17 голосов
/ 19 июня 2012

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

ОБНОВЛЕНИЕ имя_таблицы SET имя_ столбца = ЗАМЕНА ( имя_ столбца , «http://oldsite.com','http://newsite.com');

Замените полужирные детали своими.

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

11 голосов
/ 24 января 2014

Метод дампа 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');
2 голосов
/ 23 ноября 2014

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

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

Вы можете найти больше информации в блоге его автора Эрик Амундсон и на странице панели запуска проекта MySQL Search & Replace

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

1 голос
/ 08 мая 2009

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

0 голосов
/ 21 ноября 2018

MySQL REPLACE или замена строки вручную в файле sql или в db в WordPress - не очень хороший способ. WordPress использует сериализованные поля, которые могут сломаться, если вы замените в них некоторую строку (это был мой случай)

Я использовал Плагин лучше поиска , который отлично работал для меня

0 голосов
/ 20 марта 2017

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

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...