Jak przenieść stronę na WordPressie i nie rozwalić bazy danych?

Przykładowy scenariusz: wdrażamy stronę na naszym serwerze developerskim, dochodzimy do momentu gdy wszystko jest gotowe, klient zadowolony, my zadowoleni – pora przenieść stronę pod docelową domenę. Kopiujemy pliki na nowy serwer, następnie podmieniamy adres w bazie danych za pomocą szybkiego search & replace i importujemy ją do klienta. Jeszcze tylko zmiana w wp-configu i… Nagle okazuje się, że coś poszło nie tak, strona jest w rozsypce, a my mamy problem.

Dlaczego tak się stało? Powodów może być wiele, ale jeżeli ze strony zniknęły pieczałowicie wyklikane przez nas opcje, pousuwały się ustawienia we wtyczkach lub widgety, to diagnoza jest pewna – zostały uszkodzone dane zapisane w bazie w formie zserializowanej (bardzo poważną definicję serializacji znajdziecie na wikipedii). Przechowywanie danych w taki sposób jest coraz częstszą praktyką stosowaną przez twórców szablonów oraz wtyczek i jest wysoce prawdopodobne, że nieraz nieświadomie z tego korzystaliście. W bazie danych wygląda to mniej więcej tak:

a:1:{s:3:"url";s:17:"http://domena.com";}

Zwróćcie uwagę na liczbę 17. Oznacza ona ilość znaków w http://domena.com. Jeżeli przenosząc stronę podmieniliśmy ten adres w bazie danych i jego długość była większa lub mniejsza niż 17 znaków, a nie zadbaliśmy o zmienienie liczby, to mamy efekty takie jak opisane powyżej. Dlatego, drogie dzieci, jeżeli do tej pory podmienialiście adres za pomocą klasycznego znajdź i zamień, to pamiętajcie: nigdy, ale to przenigdy tego nie róbcie. Co pozostaje w zamian? Poniżej przedstawiam dwa rozwiązania:

Skrypt Search Replace DB

Metoda z której korzystam najczęściej i najchętniej. By przenieść stronę z wykorzystaniem tej metody wykonuję następujące kroki:

  1. Przenoszę pliki strony na właściwy serwer.
  2. Ściągam skrypt Search Replace DB i jego zawartość przenoszę do głównego katalogu z WordPressem.
  3. Eksportuję bazę danych ze starego serwera i importuję ją na serwer docelowy (na tym etapie nic nie zmieniam w bazie danych!).
  4. Wprowadzamy nowe dane w wp-config.php.
  5. W przeglądarce wpisuję adres strony i po ukośniku dopisuję nazwę katalogu ze skryptem (czyli np. domena.com/Search-Replace-DB-master).
  6. W formularzu wpisuję stary adres oraz nowy, (bez http://). Jeżeli uzupełniłem wcześniej wp-config, to nie muszę już wpisywać danych do bazy.
  7. Następnie klikam „live run” i potwierdzam chęć zmiany adresu.
  8. I to już wszystko, na koniec koniecznie usuńcie katalog ze skryptem.

Pomimo tego, że wyszło 8 konkretnych punktów, całość spokojnie da się zrobić w przeciąg jednej-dwóch minut. W ten sposób przeniosłem już kilkadziesiąt serwisów i z ani jednym nie miałem najmniejszych problemów. Jednym słowem – polecam!

Wtyczka Duplicator

Z Duplicatora korzystałem nim poznałem Search Replace DB. Za pomocą kilku klików możemy wygenerować paczkę, zawierającą wszystkie pliki naszej strony i bazę danych. Do tego możemy pobrać instalatora, który pozwoli szybko odtworzyć stronę na innym serwerze, nie uszkadzając zserializowanych danych.

Zbyt piękne by było prawdziwe? Owszem. W moim przypadku generowanie paczki było loterią – raz szło jak po maśle, raz kończyło się timeoutem serwera, a jeszcze innym razem wygenerowaniem niedziałającego pliku instalatora. Oczywiście im większy serwis, tym ryzyko niepowodzenia jest większe, więc raczej sugeruję stosowanie Duplicatora do mały stronek.

Coś jeszcze?

Oczywiście zdaję sobie sprawę, że nie są to jedyne metody na skuteczną podmianę adresu w bazie danych. Jeżeli macie jakieś, które u Was się szczególnie sprawdzają, to będę niezwykle wdzięczny, jeżeli podzielicie się nimi w komentarzach.