SQL-запросы, необходимые для переноса сайта на WordPress на другой домен

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

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

Что касается меня, то каждую задачу я пытаюсь максимально упростить и максимально ускорить. Поэтому вы можете пропустить теоретическую часть описания SQL-запросов и сразу перейти к инструменту, который вам сгенерирует их автоматически.

Описание запросов SQL

Вообще основных запросов три (на скриншоте есть и четвертый запрос, но о нем чуть позже). Итак, http://test.truemisha.ru — старый домен, https://misha.blog — новый.

Названия таблиц базы данных WordPress имеют префиксы. По умолчанию это wp_, но на вашем сайте префикс может быть абсолютно каким угодно, например таблица wp_posts у вас может называться misha_posts или hjkpoiposts, учтите это.

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.blog') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://test.truemisha.ru', 'https://misha.blog');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.blog');

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

Вставляем запросы во вкладке SQL в phpMyAdmin

Вкратце рассмотрим каждый из запросов по отдельности.

Замена site_url и home_url

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

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.blog') WHERE option_name = 'home' OR option_name = 'siteurl';

Поиск и замена в содержимом постов

Тут всё понятно — все ссылки и изображения в содержимом постов WordPress имеют абсолютные URL, а значит — меняем.

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://test.truemisha.ru', 'https://misha.blog');

Значения произвольных полей постов

Не всегда нужен, но если вы лишний раз запустите этот запрос, ничего плохого не случится.

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.blog');

Для чего нужны guid?

Используются для RSS как глобальный идентификатор (больше кстати не используются нигде).

колонка guid в таблице wp_posts

Так что же делать с guid? Тут есть два случая:

  • Если вы переносите сайт с локального сервера — меняем все значения guid:
    UPDATE wp_posts SET guid = REPLACE (guid, 'http://10.0.0.32', 'https://misha.blog');
  • Если же сайт уже находился в интернете, а вы просто решили поменять домен — меняем guid только для вложений:
    UPDATE wp_posts SET guid = REPLACE (guid, 'http://test.truemisha.ru', 'https://misha.blog') WHERE post_type = 'attachment';

Ссылки в комментариях

Вполне возможно, что в комментариях оставлялись внутренние ссылки на какие-либо посты или страницы сайта — значит для комментов тоже будет свой SQL-запрос.

UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'http://test.truemisha.ru', 'https://misha.blog');
UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'http://test.truemisha.ru', 'https://misha.blog');

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 10

Комментирование этого поста более не доступно.
  • Нонейм 2 июня 2014 #

    Все правильно расписано – сам пользуюсь таким же кодом уже несколько лет и никаких проблем при переносах не возникает.

  • Жека 15 ноября 2014 #

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

  • Стратегору 15 января 2015 #

    Отлично. Всё помогло, спасибо. С локалки сайт переносили на хостинг

  • alx dh 17 июня 2015 #

    Я бы добавил немного по опыту многократных клонирований базы данных продуктивного сайта на тестовую площадку.
    Иногда (причин уже не помню, возможно, из-за каких-то плагинов) после копирования таблиц и указанных вами апдейтов бывает невозможно зайти в админку.
    Выручает следующее:
    update db_name.table_prefix_usermeta
    set meta_key = replace(meta_key, "old_table_prefix", "new_table_prefix");

    Тоже самое нужно проделать и с table_prefix_options по полю option_name:
    update db_name.table_prefix_options
    set option_name = replace(option_name, "old_table_prefix", "new_table_prefix");

  • AlexZsoft 13 августа 2015 #

    Супер! Спасибо!

  • Александр 21 ноября 2019 #

    К сожалению инструмент не доступен.

    • Миша 22 ноября 2019 #

      Спасибо за ваш комментарий, Александр,

      исправил ссылку!

  • Елена 27 ноября 2019 #

    Спасибо за статью! То что искала, все расписано по полочкам! И даже мне, начинающей самоучке все ясно и понятно!

    • Миша 27 ноября 2019 #

      Отлично! 👍

  • Дмитрий 23 января 2020 #

    Чувак, тебе респект!
    Доходчивый мануал, помогло, спасибо!