Як замінити доменне ім’я в базі даних Wordpress?


12

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

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

Деякі роки тому я використовував додаток для Windows, яке дозволяє змінювати значення в базі даних і піклується про масиви JSON. На жаль, я забув назву програми ... тож питання: чи знаєте ви який-небудь додаток, який дозволяє мені робити те, що я хочу?


1
Це не є повною відповіддю, але може допомогти вам шукати: дані, які ви шукаєте, не форматовані JSON. JSON (зазвичай) не зберігає такі типи значень і довжини. Що ви дивитесь - це СЕРІАЛІЗОВАНІ дані. Пошук Google за "mysql замінити серіалізовані" дає цю сторінку, що може допомогти: davidcoveney.com/…
MathSmath

Гей, ваш коментар - єдина відповідь, яка була корисною для мене ... перемістіть його до відповіді, щоб позначити її як правильну. Спасибі!
Крістіан

Рада, що це допомогло! Я опублікував це як відповідь.
MathSmath

Відповіді:


7

Дані, які ви переглядаєте, не форматовані JSON. JSON (зазвичай) не зберігає такі типи значень і довжини. Що ви дивитесь - це СЕРІАЛІЗОВАНІ дані. Пошук Google для "mysql замінити серіалізовані" дає цю сторінку, що може допомогти: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/


Дякую ... Я працював розробником PHP 2 роки. Я не можу повірити, що забув різницю між чимось серіалізованим та рядком JSON.
Крістіан

8

Кодекс має гідне керівництво - Зміна URL-адреси сайту .

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

  • homeта siteurlпараметри, які контролюють те, де WP думає, що сайт;
  • розміщувати GUID, вони виглядають як посилання, але насправді вони не є - лише ідентифікаторами. Я не зовсім впевнений, що вони неактуальні, але я багато змінив URL-адреси на тестовому стеку і ніколи не намагався їх оновлювати.
  • зв’язки в органах поштового зв’язку;
  • можливо, посилання в налаштуваннях плагіна.

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

6

Як сказав Рарст вище, у базі даних є лише два налаштування, які потребують зміни. Після імпорту бази даних я входжу в PHPMyAdmin і редагую базу даних безпосередньо.

Я весь час використовую сервер розробки на своєму ПК, щоб імпортувати канали даних, і вони мають URL-адресу, прикріплену до Постів у рядку http: // localhost / testingite / 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');

2

Подивіться мою відповідь на це питання:

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

Сподіваюся, це допомагає.


2

Прості запити 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 або будь-яким іншим способом, який ви бажаєте отримати доступ до бази даних.


2

Переконайтеся, що у вас вибрана нова база даних, а потім запустіть кілька оновлень і команд заміни на таблицях, зокрема, 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');

1

Це дуже давнє запитання, але оскільки я натрапив на нього, шукаючи щось інше, я подумав, що додам це для подальшого ознайомлення.

Я думаю, що найпростіший, найповніший спосіб зробити це за допомогою searchreplacedb2.php. Його можна знайти тут: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ разом із поясненням його використання.

Це, безумовно, заощадило мені багато часу на переході від розробника до живих середовищ на моїх сайтах wordpress.

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


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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.