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

12

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

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

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

Cristian
источник
1
Это не полный ответ, но может помочь вам в поиске: данные, которые вы просматриваете, не отформатированы в формате JSON. JSON (обычно) не хранит типы значений и длины, подобные этим. То, на что вы смотрите - это СЕРИАЛИЗИРОВАННЫЕ данные. Поиск в Google по запросу «mysql replace serialized» приводит к появлению
MathSmath
Эй, ваш комментарий - единственный ответ, который был мне полезен ... переместите его к ответу, чтобы пометить его как правильный. Спасибо!
Кристиан
Рад, что это помогло! Я отправил это как ответ.
MathSmath

Ответы:

7

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

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

Кодекс имеет достойное руководство - изменение URL сайта .

По сути, есть несколько мест, где URL имеет значение или не так много (возможно, мне не хватает некоторых):

  • homeи siteurlопции, которые контролируют, где WP думает, что сайт находится;
  • отправьте GUID, они выглядят как ссылки, но на самом деле это не просто идентификаторы. Я не совсем уверен, что они не имеют значения, но я часто менял URL в стеке тестов и никогда не удосужился обновить их.
  • ссылки в почтовых органах;
  • возможно ссылки в настройках плагина.
Rarst
источник
Там довольно много шагов. После того, mv olddir.com newdir.comкак вам потребуется перенастроить веб-сервер, перезапустите веб-сервер. Следуйте инструкциям Кодекса здесь, и тогда вы сможете войти в систему как администратор. Это должно начать вас :-)
PJ Brunet
6

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

Дэвид

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

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

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
bueltge
источник
2

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

отметка
источник
2

Убедитесь, что у вас выбрана новая база данных, а затем запустите некоторые команды обновления и замены 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');
user129645
источник
1

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

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

Это определенно сэкономило мне много времени с переходом с dev на живую среду на моих сайтах WordPress.

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

MatthewLee
источник
0

Я вижу, вы хотите переместить свой сайт 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/

Рениш Хунт
источник