Как заменить доменное имя в базе данных WordPress?

Вопрос или проблема

У меня есть база данных WordPress, которая была установлена в среде разработки, и все ссылки на сам сайт имеют фиксированный IP-адрес (скажем, 192.168.16.2). Теперь мне нужно перенести эту базу данных в новую установку WordPress на хостинге. Проблема в том, что SQL дамп содержит много ссылок на IP-адрес, и мне нужно заменить его на: my_domain.com.

Я мог бы использовать sed или какую-то другую команду для изменения этого через командную строку, но проблема в том, что в базе много конфигурационных данных, использующих JSON. Итак, что же делать? Как вы знаете, JSON массивы используют такие вещи, как: s:4:, чтобы знать, сколько символов в элементе, и, таким образом, если я просто заменю IP на доменное имя, конфигурационные файлы будут повреждены.

Я использовал приложение для Windows несколько лет назад, которое позволяет изменять значения в базе данных и заботится о JSON массивах. К сожалению, я забыл название этого приложения… вопрос: вы знаете какое-либо приложение, которое позволяет мне сделать то, что я хочу?

Данные, которые вы рассматриваете, не в формате JSON. JSON, как правило, не хранит типы данных и их длину таким образом. То, что вы видите, — это СЕРИАЛИЗОВАННЫЕ данные. Поиск в Google по запросу “mysql заменить сериализованные” выводит эту страницу, которая может помочь: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

Codex имеет достойное руководство – Изменение URL сайта.

В основном, есть несколько мест, где URL имеет значение или не очень (возможно, я что-то пропускаю):

  • опции home и siteurl, которые контролируют, где WordPress думает, что находится сайт;
  • GUID постов, они выглядят как ссылки, но на самом деле они таковыми не являются – только идентификаторами. Я не совсем уверен, что они неактуальны, но у меня изменялись URL-адреса на тестовом стенде довольно часто, и я никогда не заморачивался на их обновление.
  • ссылки в теле сообщений;
  • возможно, ссылки в настройках плагинов.

Как сказал Rarst выше, в базе данных есть только две настройки, которые НУЖНО изменить. После импорта базы данных я вхожу в PHPMyAdmin и редактирую базу данных напрямую.

Я постоянно использую сервер разработки на своем ПК для импорта фидов данных, и они имеют URL, прикрепленные к постам, например http://localhost/testsite/post-name/, и это никогда не вызывало проблему.

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

update wp_posts set post_content = replace(post_content,'http://www.olddomain/','http://www.newdomain/');

Дэвид

Вы можете задать эти значения с помощью констант в wp-config.php. После этого вы можете, когда захотите, изменить записи в инструменте базы данных, таком как ‘PhpMyAdmin’ или ‘Adminer’.

Напишите это в wp-config.php, и значения в БД не будут иметь значения:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');

Это удивительный ресурс, который я добавил в закладки и возвращаюсь к нему снова и снова
http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you-knew-earlier/

Они указывают

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com') WHERE option_name="home" OR option_name="siteurl";

Простые SQL запросы – сложная вещь замены НЕ требуется:

update wp_options set option_value="http://mynewdomain.com" where option_name="siteurl";

update wp_options set option_value="http://mynewdomain.com" where option_name="home";

Используйте их с PHPMyAdmin или любым другим способом доступа к базе данных.

Убедитесь, что новая база данных выбрана, затем выполните некоторые SQL обновления и команды замены в таблицах, особенно в wp_options, wp_posts, wp_postmeta.

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

UPDATE wp_options SET option_value = replace(option_value, 'http_www.oldurl', 'http_www.newurl') WHERE option_name="home" OR option_name="siteurl";    
UPDATE wp_posts SET guid = replace(guid, 'http_www.oldurl','http_www.newurl');    
UPDATE wp_posts SET post_content = replace(post_content, 'http_www.oldurl', 'http_www.newurl');    
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http_www.oldurl','http_www.newurl');

Посмотрите на мой ответ на этот вопрос:

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

Надеюсь, поможет.

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

Я думаю, что самый простой, наиболее полный способ сделать это — использовать searchreplacedb2.php. Он доступен здесь: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ вместе с объяснением его использования.

Это действительно сэкономило мне много времени при миграции из среды разработки в рабочую среду на моих сайтах WordPress.

Просто убедитесь, что вы удаляете его с общедоступного сервера после того, как закончите!

Я вижу, что вы хотите перенести ваш сайт WordPress из среды разработки на новый сервер или в продакшн.

Недавно я перенес мой сайт на продакшн сервер и столкнулся с такой же ситуацией. Мне нужно было обновить URL сайта, потому что WordPress хранит URL сайта в базе данных.

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

SET @search := "http://olddomain.com";
SET @replace := "http://newdomain.com";

UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "siteurl";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "home";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "product_list_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "shopping_cart_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "checkout_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "widget_text";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerImageLogo";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "cunjo_plugin_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "wpsr_socialbt_data";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "issuem";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "_transient_dgxdonate_t70pbg1htu_1396322372";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "dgx_donate_log";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerBackgroundImage";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "transact_url";
UPDATE `wp_postmeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_usermeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_posts` SET `guid`=REPLACE(guid, @search, @replace);
UPDATE `wp_posts` SET `post_content`=REPLACE(post_content, @search, @replace);

Вам просто нужно заменить URL вашего сайта со старого доменного имени на новое, затем выполнить команду в MySQL, используя PHPMYADMIN.

Для большей справки, вы можете прочитать этот учебник.

https://tryvary.com/wordpress-change-url-in-database-using-mysql-query/

Убедитесь, что вы подключены к новой базе данных, затем выполните несколько SQL запросов.

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

UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'https://oldomain.com', 'https://newdomain.com'),
    guid = REPLACE(guid, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_options 
SET option_value = REPLACE(option_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_commentmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_comments 
SET comment_content = REPLACE(comment_content, 'https://oldomain.com', 'https://newdomain.com');

.

Ответ или решение

Проблема изменения доменного имени в базе данных WordPress довольно часто встречается при переносе сайта из локальной среды разработки на коммерческий хостинг. Суть в том, что все ссылки и конфигурации в базе данных изначально указывают на IP-адрес или временный домен, например на 192.168.16.2, который необходимо заменить на постоянный — my_domain.com.

Теория
Важные элементы, которые необходимо изменить в базе данных WordPress, включают параметры home и siteurl, которые определяют основной URL сайта. Кроме того, ссылки на старый домен могут присутствовать в содержании постов wp_posts, метаданных wp_postmeta и в других таблицах. Помимо простых замен, также следует уделить внимание сериализованным данным, где длина строки фиксируется вместе с её содержимым. Прямое редактирование таких структур с помощью sed или аналогичных инструментов может нарушить формат данных.

Пример
Популярным решением является использование скрипта searchreplacedb2.php, специально разработанного для подобной задачи. Скрипт автоматически распознает и корректно обновляет сериализованные данные, минимизируя риск ошибок. Он доступен на сайте InterconnectIT.

Инструкция по используемому SQL-запросу:

-- Задание переменных замены
SET @search := 'http://192.168.16.2';
SET @replace := 'http://my_domain.com';

-- Обновление URL в параметрах сайта
UPDATE wp_options SET option_value = REPLACE(option_value, @search, @replace) WHERE option_name IN ('siteurl', 'home');

-- Замена в содержимом постов
UPDATE wp_posts SET post_content = REPLACE(post_content, @search, @replace);

-- Обновление GUID постов
UPDATE wp_posts SET guid = REPLACE(guid, @search, @replace);

-- Обновление метаданных
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, @search, @replace);

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

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

Оцените материал
Добавить комментарий

Капча загружается...