Jak zamienić nazwę domeny w bazie danych Wordpress?

12

Mam bazę danych Wordpress, która została zainstalowana w środowisku programistycznym ... dlatego wszystkie odwołania do samej witryny mają stały adres IP (powiedzmy 192.168.16.2). Teraz muszę przenieść tę bazę danych do nowej instalacji Wordpress na hoście. Problem polega na tym, że zrzut SQL zawiera wiele odniesień do adresu IP i muszę go zastąpić: moja_domena.com.

Mógłbym użyć sedlub innego polecenia, aby zmienić to z wiersza poleceń, problem polega na tym, że istnieje wiele danych konfiguracyjnych, które używają JSON. Więc co? Cóż, jak wiesz, tablice JSON używają takich rzeczy jak: s:4:aby dowiedzieć się, ile znaków ma element, a zatem, jeśli po prostu zastąpię adres IP nazwą domeny, pliki konfiguracyjne zostaną uszkodzone.

Kilka lat temu korzystałem z aplikacji dla systemu Windows, która pozwala zmieniać wartości w bazie danych i zajmuje się tablicami JSON. Niestety zapomniałem nazwy aplikacji ... więc pytanie brzmi: czy znasz jakąś aplikację, która pozwala mi robić to, co chcę?

Cristian
źródło
1
To nie jest pełna odpowiedź, ale może ci pomóc w jej znalezieniu: dane, na które patrzysz, nie są sformatowane w JSON. JSON nie przechowuje (zwykle) takich typów wartości i długości. To, na co patrzysz, to dane SERIALIZOWANE. Wyszukiwarka google „mysql replace serialized” daje tę stronę, która może pomóc: davidcoveney.com/…
MathSmath,
Hej, twój komentarz jest jedyną odpowiedzią, która była dla mnie przydatna ... przenieś go do odpowiedzi, aby oznaczyć jako poprawną. Dzięki!
Cristian,
Cieszę się, że pomogło! Opublikowałem to jako odpowiedź.
MathSmath,

Odpowiedzi:

7

Dane, na które patrzysz, nie są sformatowane w JSON. JSON nie przechowuje (zwykle) takich typów wartości i długości. To, na co patrzysz, to dane SERIALIZOWANE. Wyszukiwanie w Google hasła „mysql replace serialized” daje tę stronę, która może pomóc: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath
źródło
Dziękuję ... Pracowałem jako programista PHP przez 2 lata. Nie mogę uwierzyć, że zapomniałem różnicy między czymś zserializowanym a łańcuchem JSON.
Cristian,
8

Codex ma porządny przewodnik - Zmiana adresu URL witryny .

Zasadniczo istnieje kilka miejsc, w których adres URL ma znaczenie lub nie ma go tak bardzo (być może brakuje mi niektórych):

  • homeoraz siteurlopcje kontrolujące, gdzie WP myśli, że witryna jest;
  • publikują identyfikatory GUID, wyglądają jak linki, ale tak naprawdę nie są to tylko identyfikatory. Nie jestem absolutnie pewien, że są nieistotne, ale często zmieniłem adresy URL na stosie testowym i nigdy nie zadałem sobie trudu, aby je zaktualizować.
  • linki w organach pocztowych;
  • ewentualnie linki w ustawieniach wtyczek.
Rarst
źródło
Jest kilka kroków. Po mv olddir.com newdir.comzmianie konfiguracji serwera uruchom go ponownie. Postępuj zgodnie z instrukcjami kodeksu tutaj, a następnie powinieneś być w stanie zalogować się jako administrator. To powinno wystartować :-)
PJ Brunet
6

Jak powiedział Rarst powyżej, w bazie danych są tylko dwa ustawienia, które POTRZEBUJE zmienić. Po zaimportowaniu bazy danych loguję się do PHPMyAdmin i edytuję bazę danych bezpośrednio.

Korzystam z serwera programistycznego na komputerze przez cały czas, aby importować źródła danych, a one mają adres URL dołączony do postów zgodnie z http: // localhost / testsite / post-name / i to nigdy nie spowodowało problemu.

Kiedyś używałem wyszukiwania SQL i zamieniałem, dopóki nie zdałem sobie sprawy, że to nie ma znaczenia. Przeprowadziłem migrację kilku witryn z jednej domeny do drugiej i tam, gdzie w treści miałem bezwzględne adresy URL, skorzystam z opcji wyszukiwania i zamiany SQL.

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

David

David Law
źródło
Istnieje kilka wtyczek, takich jak ContactForm7, które również zapisują nazwę domeny w serializowanym ciągu, między innymi zmiennymi konfiguracyjnymi. Po zmodyfikowaniu serializowanego ciągu może ulec uszkodzeniu, jeśli zmieni się jego długość, więc w rzeczywistości czasami trzeba zmienić coś więcej niż tylko dwa ustawienia.
Cristian,
3

Możesz ustawić te wartości za pomocą stałych w wp-config.php. Następnie możesz, kiedy chcesz, zmieniać wpisy w bazie danych za pomocą wtyczki Adminer. Zapisz to w, wp-config.phpa wartości w DB nie są istotne:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
bueltge
źródło
2

Proste zapytania SQL - nie wymaga skomplikowanych operacji WYMIANA:

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';

Użyj tych z PHPMyAdmin lub w inny sposób, który wolisz uzyskać dostęp do bazy danych.

znak
źródło
2

Upewnij się, że wybrano nową bazę danych, a następnie uruchom kilka aktualizacji SQL i poleceń zastępujących w tabelach, w szczególności wp_options, wp_posts, wp_postmeta.

Użyj kodu jak poniżej i zamień na stare i nowe adresy URL, bez końcowych ukośników. W razie potrzeby zmień także wartości prefiksu tabeli, jeśli ma to zastosowanie (np. 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');
użytkownik129645
źródło
1

To jest bardzo stare pytanie, ale ponieważ natknąłem się na nie, szukając czegoś innego, pomyślałem, że dodam to na przyszłość.

Myślę, że najprostszym i najbardziej kompletnym sposobem na to jest searchreplacedb2.php. Można go znaleźć tutaj: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ wraz z wyjaśnieniem jego zastosowania.

To zdecydowanie zaoszczędziło mi dużo czasu dzięki migracji z deweloperów do środowisk na żywo na moich stronach wordpress.

Upewnij się, że po zakończeniu usuniesz go z serwera publicznego!

MatthewLee
źródło
0

Widzę, że chcesz przenieść swoją witrynę WordPress ze środowiska programistycznego na nowy serwer lub serwer produkcyjny.

Niedawno przeniosłem moją witrynę na serwer produkcyjny i mam taką samą sytuację. Muszę zaktualizować adres URL witryny, ponieważ WordPress zapisał adres URL witryny w bazie danych.

Znalazłem dobre zapytanie MySQL, dzięki któremu mogę łatwo zmienić adres URL bezpośrednio z bazy danych, jak.

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);

Wystarczy zastąpić adres URL witryny ze starej nazwy domeny na nową domenę, a następnie wykonać zapytanie na MySQL przy użyciu PHPMYADMIN.

Więcej informacji można znaleźć w tym samouczku.

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

Renish Khunt
źródło