Как я могу изменить URL внутри поля в MySQL? - PullRequest
5 голосов
/ 09 июня 2009

У меня есть таблица под названием «wp-posts» с полем «post-content». Это поле содержит текст сообщения блога. Я хочу изменить все записи, чтобы заменить URL-адрес другим.

Представь, что у меня могут быть такие вещи:

Это тест и где-то есть что-то вроде imageoldurl.com/wp-content/somimg.jpg"> и что-то вроде oldurl.com/something"> ссылка . "

Я хочу, чтобы это было

Это тест и где-то есть что-то вроде imagenewurl.com/wp-content/somimg.jpg"> и что-то вроде newurl.com/something"> ссылка . "

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

Ответы [ 5 ]

19 голосов
/ 09 июня 2009

Этого легко достичь с помощью простого оператора SQL, использующего функцию MySQL replace(). Прежде чем мы это сделаем, вы должны обязательно сделать дамп базы данных или что-то еще, что вы используете для резервного копирования. Дело не только в том, что это именно то, что нужно делать ™, но если вы допустили ошибку в замене, это может оказаться сложным, чтобы отменить ее (да, вы можете откатиться, но позже вы сможете выяснить свою ошибку).

Чтобы создать дамп базы данных из MySQL, вы можете запустить что-то вроде этого -

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

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

  • имя хоста является заполнителем для имени хоста базы данных. Если сервер базы данных работает на вашем собственном компьютере, вы можете либо использовать «localhost», либо просто оставить «-h hostname» полностью выключенным
  • имя пользователя - это заполнитель для пользователя с разрешением запустить дамп в базе данных. Это часто администратор, но если это общая база данных, то это может быть просто вы.
  • databasename - это имя всей базы данных, содержащей ваши таблицы. (Обратите внимание, что «-p» не имеет ничего общего с этим именем базы данных. «-P» означает, что MySQL должен запросить у вас пароль для входа в систему.)

Теперь, когда мы это получили, вы можете войти в базу данных MySQL, используя:

mysql -h hostname -u username -p databasename

И просто запустите это утверждение:

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

И это должно сделать это!

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

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

И вуаля .

4 голосов
/ 09 июня 2009

Используйте функцию replace string в MySQL:

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

1 голос
/ 09 июня 2009

Есть удобный плагин Wordpress, который я использовал для поиска и замены на страницах сообщений с помощью grep:

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

0 голосов
/ 21 мая 2013

Есть несколько мест, где можно это решить.

  1. Резервное копирование вашей базы данных
  2. Попробуйте использовать внутреннюю утилиту WordPress
  3. Поиск совпадений
  4. Напишите свой собственный поиск и замените

Процедура

1. Сделайте резервную копию вашей базы данных

Я обычно так и говорю:

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

У меня даже есть это в crontab на моем собственном сервере. Но это другая тема.

2. Попробуйте использовать внутреннюю утилиту WordPress

В этом случае WordPress имеет собственную утилиту. В большинстве случаев это может быть сделано только с ним.

Просто добавьте в functions.php ( см. Документацию WordPress ) вашей темы следующую строку:

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

Предполагается, что вы уже запускаете тему с этим конкретным functions.php файлом.

Запустите сайт, обновив страницу.

Затем прокомментируйте строки!

Тебе они больше не понадобятся.

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

Если этого недостаточно, продолжайте ...

3. Поиск совпадений

Я лично использую Adminer в своем развертывании, это легкая замена одного файла для PHPMyAdmin.

Почему я предлагаю Adminer ? Он имеет хорошую функцию поиска по всей базе данных, которая мне очень пригодится в нашем сценарии использования.

Это окно поиска с надписью: «Поиск в таблицах данных».

4. Напишите свой поиск и замените

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");

Обратите внимание, что в моем случае я переносил ВСЕ свои URL-адреса с NON HTTPS на HTTPS.

Надеюсь, это было полезно

0 голосов
/ 12 июля 2009

Я недавно использовал http://wordpress.org/extend/plugins/search-and-replace/ для обновления сайта с сервера разработки на общедоступный сервер. Я использовал плагин, чтобы изменить все URL-адреса изображений с их «00.00.00.00/~user/» на их «example.com» формат.

Работало отлично.

Конечно, сначала обязательно сделайте резервную копию базы данных на случай, если в процессе произойдет опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...