Kopiowanie skryptem bazy Joomla! z produkcyjnej do lokalnej

Zdjęcie autora
Lindus One
Autor:
Lindus One
Data Publikacji:
Aktualizacja:

Kopiowanie bazy produkcyjnej do lokalnej wymaga narzędzi typu PHP MyAdmin i pracy w dwóch etapach, najpierw kopia potem odtwarzanie. Doskonałym udogodnieniem jest prosty skrypt „batchowy” w Windows który zrobi to jednym kliknięciem.

Materiał archiwalny - aktualność może być ograniczona

Dlaczego skrypt jest lepszy od ręcznego kopiowania

Bardzo często zdarza się, że potrzebujemy synchronizować kilka razy w ciągu dnia lokalną bazę Joomla! z danymi z bazy produkcyjnej. Możemy np. przygotowywać artykuły i nie chcemy ich publikować w internecie żeby wyszukiwarki albo internauci nie widzieli częściowych zmian. Tworzymy w takim wypadku artykuły na bazie produkcyjnej, a testujemy sobie spokojnie na lokalnej. Poza tym kopiowanie przy użyciu narzędzi pośrednich wymaga naszej uwagi, a gdy użyjemy automatycznego skryptu, klikamy i czekając możemy zająć się innymi sprawami.

Opis skryptu

BPoniższy opis wykorzystuje możliwość napisania w Microsoft Windows prostego pliku „batch file” w którym wykonywane są kolejne komendy i wywołania plików wykonywalnych.

Domyślnie z bazą MySql instalowane są dwa pliki - mysqldump.exe i mysql.exe. Służą one między innymi do tworzenia i odtwarzania kopii bazy. Wywołując je w kolejności z odpowiednimi parametrami uzyskamy efekt bezpośredniej kopii z bazy produkcyjnej do testowej. Nasz skrypt wykona kopię bazy na dysku, a następnie ją odtworzy.

Skrypt jest zwykłym plikiem tekstowym z rozszerzeniem .bat. Najpierw musimy utworzyć w notatniku dokument, zapisać go z rozszerzeniem .bat (np. kopia_bazy.bat), następnie wkleić kod i dokonać odpowiednich zmian w konfiguracji.

Kilka uwag:

  • Testowane na Windows XP i MySql 5.0/5.5, ale powinno działać bez zarzutu w Vista i Wndows 7.1
  • Uwaga w konfiguracji na bazę źródłową i docelową, pomyłka może kosztować zepsuciem danych produkcyjnych.
  • Proces nie jest zbyt szybki, przy dużej bazie trzeba trochę zaczekać. Niestety mysqldump nie jest wydajnym narzędziem.
  • Jeżeli kilka razy użyjemy skryptu plik kopii będzie nadpisywany, nie ma potrzeby go kasować.
  • Żeby proponowane rozwiązanie działało dostawca hostingowy musi udostępniać bazę dla zdalnych połączeń.
  • Należy utworzyć katalog w którym będzie zapisywany plik pośredni oraz bazę lokalną, ponieważ skrypt samodzielnie jej nie utworzy. W naszym przykładzie C:\temp
  • W przykładzie poniżej dane z naszej bazy lokalnej będą nadpisywane przez dane z bazy produkcyjnej co oznacza, że wszystko co robiliśmy lokalnie zostanie skasowane w momencie odtwarzania.

Kod naszego skryptu:

rem Należy wprowadzić własne prawidłowe ustawienia
rem Ustawienia ogólne
set WorkingDirectory=C:\temp\
set MySQLDirectory=C:\UniServer\usr\local\mysql\bin\
rem Ustawienia bazy źródłowej. Z tej będą pobierane dane!!!
set SourceDbHost=sql.twojaJoomla.net
set SourceDbName=nazwa_bazy
set SourceDbUser=nazwa_uzytkownika
set SourceDbPassword=haslo_do_bazy
set SourceDbPortNumber=3306
rem Ustawienia bazy docelowej. Tutaj zostaną nadpisane dane.
rem Jeżeli baza lokalna nie istnieje trzeba ją ręcznie założyć np. PHP MyAdmin.
set DestDbHost=localhost
set DestDbName=nazwa_bazy
set DestDbUser=nazwa_uzytkownika
set DestDbPassword=haslo_do_bazy
rem Pobieranie kopii bazy do pliku
"%MySQLDirectory%mysqldump" --opt --compress --port=%SourceDbPortNumber% 
--host="%SourceDbHost%" --user="%SourceDbUser%"
--password="%SourceDbPassword%" "%SourceDbName%" > "%WorkingDirectory%%SourceDbName%.sql" rem odtwarzanie bazy produkcyjnej na lokalną "%MySQLDirectory%mysql" --host="%DestDbHost%" --user=%DestDbUser%
--password=%DestDbPassword% --database=%DestDbName% < "%WorkingDirectory%%SourceDbName%.sql" echo. echo Koniec, naciśnij dowolny przycisk lub zamknij okno. pause