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

21 дек. 2010 г., 22:54:53
Просмотры: 46.7K
Голосов: 17

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

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

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

3
Комментарии

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

MathSmath MathSmath
21 дек. 2010 г. 23:10:09

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

Cristian Cristian
22 дек. 2010 г. 14:39:25

Рад, что помог! Я опубликовал его как ответ.

MathSmath MathSmath
22 дек. 2010 г. 20:16:38
Все ответы на вопрос 11
1
11

В Codex есть хорошее руководство - Изменение URL сайта.

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

  • Опции home и siteurl, которые контролируют, где, по мнению WordPress, находится сайт;
  • GUID записей, которые выглядят как ссылки, но на самом деле являются только идентификаторами. Я не совсем уверен, что они не имеют значения, но я много раз менял URL на тестовом стенде и никогда не обновлял их.
  • Ссылки в теле записей;
  • Возможно, ссылки в настройках плагинов.
22 дек. 2010 г. 06:58:03
Комментарии

Здесь довольно много шагов. После того как вы выполните mv olddir.com newdir.com, вам нужно будет перенастроить ваш веб-сервер, перезапустить веб-сервер. Следуйте инструкциям в codex здесь, и затем вы сможете войти как администратор. Это должно помочь вам начать :-)

Jay Brunet Jay Brunet
17 февр. 2015 г. 23:00:38
2

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

22 дек. 2010 г. 20:16:06
Комментарии

Спасибо... Я работал PHP-разработчиком 2 года. Не могу поверить, что забыл разницу между сериализованными данными и JSON-строкой.

Cristian Cristian
22 дек. 2010 г. 20:56:05

теперь у этого есть репозиторий на GitHub: https://github.com/interconnectit/Search-Replace-DB

Lluís Lluís
22 июл. 2021 г. 09:15:50
0

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

Добавьте это в файл wp-config.php, и тогда значения в базе данных не будут иметь значения:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
22 дек. 2010 г. 00:02:59
1

Как сказал 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/');

Дэвид

23 дек. 2010 г. 01:53:19
Комментарии

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

Cristian Cristian
23 дек. 2010 г. 03:03:17
0

Это потрясающий ресурс, который я добавил в закладки и к которому возвращаюсь снова и снова 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';
21 дек. 2010 г. 23:51:47
0

Простые SQL-запросы — без сложных конструкций с REPLACE:

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 или любой другой удобный вам способ доступа к базе данных.

23 дек. 2010 г. 04:31:57
0

Убедитесь, что выбрана новая база данных, затем выполните несколько 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');
14 окт. 2017 г. 20:31:12
0

Ознакомьтесь с моим ответом на этот вопрос:

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

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

22 дек. 2010 г. 07:16:36
0

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

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

Этот инструмент определенно сэкономил мне много времени при переносе сайтов с тестовой среды на продакшн в моих WordPress-проектах.

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

19 апр. 2013 г. 20:02:14
0

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

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

Я нашел хороший 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/

27 мар. 2020 г. 05:35:07
0

Убедитесь, что вы подключены к новой базе данных, затем выполните несколько 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');
13 янв. 2025 г. 18:34:10