Konfiguracja środowiska testowego dla developera PHP pod Windows (część 2): serwery baz danych

Artykuł dodany: 27 sierpnia 2012. Ostatnia modyfikacja: 27 sierpnia 2012.

Stopień trudności (1 - dla początkujących, 5 - dla ekspertów): 1

W poprzednim artykule zapoznaliśmy się z podstawową konfiguracją serwera Apache zintegrowanego z pakietem Zend Server. Teraz zajmiemy się dwoma bardzo popularnymi systemami baz danych, MySQL oraz PostgreSQL. Ze względu na łatwość instalacji i pewne zaszłości historyczne, zwłaszcza utarty w świadomości stos LAMP (Linux Apache MySQL PHP), usługodawcy hostingowi w dalszym ciągu chętniej oferują swoim klientom bazę MySQL. Jednak coraz częściej podejście to zmienia się a wręcz, z popularyzacją rozwiązań chmurowych, przestaje mieć sens. Coraz łatwiej znaleźć można hosting bazujący nie tylko na rozwiązaniach open-source ale też łączący możliwości produktów typowo komercyjnych z oprogramowaniem darmowym. Co wybrać do nauki? Nie ma jednoznacznej odpowiedzi na to pytanie. Na pewno nie należy zamykać się tylko w jednym ekosystemie, warto ciągle poszerzać swoje horyzonty, poznawać potencjał innych silników i zarazem obserwować rynek pracy aby pozostawać konkurencyjnym. Korzystając z gotowych, darmowych produktów jak CMS, fora dyskusyjne czy systemy sklepowe możemy nie mieć nawet możliwości zmiany silnika bazy danych. W razie potrzeby modyfikacji wiedza uzyskana przez znajomość kilku produktów zaprocentuje. Zacznijmy od instalacji w systemie bazy MySQL.

Instalacja serwera MySQL

Strona domowa projektu: www.mysql.com

Baza MySQL rozwijana początkowo przez szwedzką firmę MySQL AB, obecnie przez Oracle, mimo wielu wad cieszy się nieustannie ogromnym zainteresowaniem. Jest łatwa w instalacji i konfiguracji, dobrze wspierana przez firmy zewnętrzne (edytory, dodatkowe biblioteki, oprogramowanie webowe i desktopowe), oferuje kilka silników z których domyślny (do wersji 5.5) MyISAM nie wymaga przesadnie dużej wiedzy od adepta sztuki programowania. Ta niewielka trudność MyISAM niesie za sobą spore ograniczenia których powoli w obecnym świecie nie można zaakceptować. Dlatego raczej domyślnym silnikiem który powinieneś wybierać tworząc nowe tabele jest InnoDB – oferujący już transakcje i klucze obce.

Pakiet MySQL Community Server (czyli wersję na licencji GPL) pobieramy dla naszego systemu z oficjalnej strony projektu. Do wyboru są pakiety 32 i 64-bit zależne od posiadanej wersji Windowsa oraz architektury procesora. Po uruchomieniu instalatora zostaniemy zapytani o przeznaczenie naszej instancji serwerowej. Ponieważ środowisko ma służyć wyłącznie do testów wybieramy opcję “Developer Machine”. Pozostałe 2 – “Server Machine” i “Dedicated MySQL Server Machine” zmieniają opcje konfiguracji przyznając odpowiednio więcej pamięci i robiąc dodatkowy tuning który miałby sens gdyby nasz komputer służył jako podstawowy serwer produkcyjny.

Kolejnym krokiem będzie wybór silnika bazy danych:

Rzecz o której pisałem wcześniej. Dla testów najlepiej zaznaczyć opcję “Multifunctional Database” co pozwoli nam korzystać zarówno z silnika InnoDB jak i MyISAM. Oczywiście włączenie obu silników na produkcji może mieć niekorzystny wpływ na wydajność i niepotrzebnie zwiększy zapotrzebowanie na pamięć. Gdybyśmy chcieli postawić własny serwer produkcyjny a zarazem mielibyśmy pełną kontrolę nad pisaną aplikacją (żadnych darmowych rozwiązań które mogą wymagać różnych silników) możemy wybrać najkorzystniejszy dla nas. Opcja “Transactional database only” uruchamia tylko silnik InnoDB, “Non-Transactional database only” wyłącznie MyISAM.

Kolejnym krokiem będzie wybór miejsca na przechowywanie naszych danych:

Podobnie jak w trakcie konfiguracji serwera HTTP dobrym wyborem będzie rozdzielenie miejsca instalacji całego serwera MySQL od tego, gdzie przechowujemy dane właściwe. Serwer możemy zainstalować w typowej lokalizacji “c:\Program Files” natomiast nasze dane mogą być przechowywane na opisywanym już w poprzednim artykule dysku lub partycji d, w przykładowym katalogu “d:/Server/MySQL/data”.

Kolejna opcja ustawia liczbę jednoczesnych połączeń:

Dla naszego serwera testowego nie ma co przesadzać i np. ustawić wartość ręcznie (“Manual setting”) na 10. Większa wartość (“Online transaction processing (OLTP)”) przeznaczona jest dla serwerów obsługujących znaczny ruch i wymaga przydzielenia większej liczby zasobów sprzętowych. Odnieś się do dokumentacji MySQL jeżeli jesteś zainteresowany zrozumieniem jak serwer obsługuje procesy i rozdysponowuje pamięć.

Kolejnym krokiem będzie włączenie połączeń TCP/IP. Opcja przydatna jeżeli chcemy mieć możliwość połączenia z zewnątrz do naszej maszyny. Podobnie jak serwer HTTP tak też MySQL pracuje na pewnym domyślnym porcie. Dla Apache jest to port 80, dla serwera MySQL 3306. Jeśli zdecydujemy się nie zaznaczać tej opcji dostępne będzie jedynie połączenie lokalne. Zaznaczenie opcji “add firewall exception” doda nam automatycznie regułę odblokowującą do naszej windowsowej zapory sieciowej. Dostępna niżej opcja “Enable Strict Mode” powoduje że zapytania które wcześniej wyświetlałyby ostrzeżenie i były przetwarzane dalej, teraz zostaną wstrzymane wyświetlając zarazem błąd (error). Czyli np. uniemożliwi nam wstawienie wartości string do kolumny zdefiniowanej jako integer. MySQL jest rozwijany od wielu lat. Kiedyś nie przykładało się tak wielkiej wagi do poprawności kodu i programiści akceptowali sytuacje w których wystarczyło że coś działało. Obecnie spojrzenie na te kwestie uległo znacznej zmianie. Przykłada się więcej uwagi do testowania aplikacji, internet umożliwia bezproblemową i sprawną pracę grupową. Dobrze aby kod był czytelny, maksymalnie spójny a tylko pisanie zgodnie ze standardami, eliminując ostrzeżenia zamiast je ukrywając, zapewnia pełną przenośność. Dlatego najlepiej zostaw tę opcją włączoną.

Następny ekran dotyczy ustawienia kodowania znaków:

Zalecam aby wybrać opcję “Best support for multilangualism” co włączy nam domyślnie kodowanie UTF8. We wcześniejszym artykule możesz znaleźć więcej informacji na ten temat. Kodowanie UTF8 jest obecnie standardem. Obejmuje pełen zestaw znaków w różnych językach. Nie powinno się już używać innego na stronach choć dla osoby początkującej będzie to stanowiło niewielki problem konfiguracyjny. Gdybyś jednak z jakiegoś powodu nie chciał wykorzystać możliwości jakie przynosi Unikod, domyślnym zestawem znaków dla naszego kraju będzie “latin2”.

Gdy klikniemy “next” naszym oczom ukaże się ekran konfiguracji serwera MySQL jako usługi Windows.

Zaznaczamy “Install as Windows service” jeżeli chcemy aby MySQL był usługą systemową. Dodatkowo przez zaznaczenie “Launch the MySQL server automatically” powodujemy, że po każdym restarcie maszyny usługa zostanie automatycznie uruchomiona. Opcję tę należy zaznaczyć wedle uznania, w zależności od tego jak często będziemy z serwera korzystać. Niżej znajduje się opcja dodania katalogu BIN do zmiennej systemowej PATH. Dzięki temu uruchamiając konsolę windows (kombinacja klawiszy win+r a następnie cmd) będziemy w stanie wykonywać wszystkie programy jakie w nim się znajdują (czyli np. konsolę mysql.exe).

Na ostatnim już ekranie ustawiamy główne hasło administratora czyli w serwerze MySQL użytkownika root. Ma on pełne możliwości do kasowania i edycji tabel, użytkowników, widoków itd. Pisząc aplikację pamiętaj aby nigdy nie pracować na koncie administratora. Zresztą w hostingu współdzielonym nie będziesz w stanie zalogować się na to konto. Dobrą praktyką będzie stworzyć konto użytkownika do jednego projektu i ograniczyć uprawnienia tylko do działań które dany użytkownik musi wykonywać i nic ponad to. Pamiętaj że w sieci włamania są codziennością i na każdym etapie należy planować jak im zaradzić. Opcja “Enable root access from remote machines” powoduje że będziemy mogli zalogować się zdalnie jako użytkownik root. W większości przypadków dla naszego środowiska testowego nie będzie potrzebna chyba że masz inne wymagania. Przyznawanie dostępu anonimowym użytkownikom (niżej) również możemy pominąć.

Nasz serwer MySQL powinien być w tym momencie poprawnie skonfigurowany i oczekiwać połączeń. Jak sprawdzić czy wszystko przebiegło pomyślnie? Należy połączyć się jako użytkownik root do serwera. Najłatwiej będzie wykorzystać wbudowaną konsolę czyli właśnie przedstawiony wcześniej plik mysql.exe z katalogu bin w ścieżce naszej instalacji. Jeżeli zdefiniowaliśmy że ścieżka ma być dodana do zmiennej systemowej PATH wystarczy uruchomić powłokę systemową i wydać polecenie:

mysql.exe -u root -p

Jako hasło podać ciąg znakowy zdefiniowany w ostatnim kroku instalacji. Serwer powinien przyjąć dane użytkownika i udostępnić nam możliwość wprowadzania zapytań:

mysql>

Aby przetestować czy wszystko działa możemy pobrać numer wersji:

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.27    |
+-----------+
1 row in set (0.00 sec)

Pisanie zapytań z konsoli może nas wiele nauczyć jednak jest dość uciążliwe na dłuższą metę. Mamy w końcu XXI wiek i pracujemy na systemie okienkowym z ładnym interface graficznym. Wiele osób nie zastanawiając się zbytnio pobierze phpMyAdmin – narzędzie przeznaczone do administrowania MySQL, napisane w PHP. O ile na serwerze hostingowym, z wyłączonym zdalnym logowaniem ma ono sens, to jednak warto zwrócić uwagę na potężny zbiór aplikacji udostępnionych przez Oracle pod nazwą MySQL Workbench.

Instalacja MySQL Workbench

MySQL Workbench umożliwia administrowanie, projektowanie i tworzenie zapytań w serwerze MySQL. Po typowej instalacji powinno ukazać nam się okno:

Część “SQL Development” umożliwia nam definiowanie i zarządzanie połączeniami do różnych serwerów baz danych, uruchamiania skryptów SQL oraz, co pewnie okaże się najbardziej przydatne, edycję tabel, indeksów, kluczy obcych.

Na zdjęciu poniżej przedstawione zostało wykonanie zapytania SELECT version(); i sposób prezentacji danych wyjściowych.

Naturalną funkcją w edytorach jest podpowiadanie składni które zdecydowanie przyśpiesza pisanie kodu i niweluje popularne ale jakże częste literówki. Oprócz funkcji typowo SQLowych edytor jest nam w stanie podpowiedzieć nazwy tabel czy widoków. W oknie poniżej wyświetla nam się historia zapytań oznaczona odpowiednim kolorem zależnym od tego, czy zapytanie zakończyło się sukcesem czy błędem. “Object browser” umożliwia przeglądanie obiektów w naszej bazie danych czyli otwiera zarządzanie strukturą. To tutaj powinieneś skierować swe kroki jeżeli chcesz utworzyć nową tabelę, w niej pola, indeksy, klucze obce.

Wracając do okna głównego, w środkowej kolumnie mamy możliwość tworzenia diagramów związków encji.

Diagramy te przedstawiają nam poszczególne relacje oraz powiązania pomiędzy nimi. Tworząc nowy projekt mamy możliwość albo ręcznie utworzyć poszczególne relacje, albo też narysować je i przenieść do bazy w postaci wykonalnego kodu SQL który MySQL Workbench wygeneruje automatycznie. Technika ta nazywa się “Forward Engineering” (szukaj w opcjach). Jeżeli dysponujemy już gotowym projektem, mamy zdefiniowane wszystkie relacje możemy również wygenerować diagram tyle że korzystając z inżynierii wstecznej (“Reverse Engineering”). MySQL Workbench odtworzy całą strukturę. Po wyeksportowaniu danych diagramu możemy wrócić do zwykłego edytora i widzimy że cała struktura jest dostępna w standardowym widoku.

Oprócz narzędzi deweloperskich posiadamy także dostęp do opcji zarządzania naszym serwerem (“Server Administration” na widoku ogólnym):

W bardzo przejrzysty sposób podane są nam najważniejsze informacje o zajętości pamięci, aktywnych połączeniach czy obciążeniu procesora. Ale to nie wszystko ponieważ posiadamy również możliwość zarządzania użytkownikami, wykonywania i odtwarzania kopii zapasowych a nawet, z poziomu GUI, zmiany opcji konfiguracyjnych serwera.

Plik konfiguracyjny bazy MySQL nazywa się “my.ini” i znajdziemy go w katalogu instalacji, może to być przykładowo “Program Files/MySQL/MySQL Server 5.5/”.

W artykule bardzo pobieżnie przedstawiłem najważniejsze funkcje MySQL Workbench, po tych kilku akapitach widać jednak, jakie możliwości kryją się w tej aplikacji. Namawiam aby bardzo dokładnie przejrzeć pozostałe opcje, zajrzeć do dokumentacji a z całą pewnością zwiększymy efektywność programowania.

Instalacja serwera PostgreSQL

Strona domowa projektu: www.postgresql.org

Baza danych PostreSQL, czasami zwana Postgres, to projekt opracowany na Uniwersytecie Kalifornijskim w Berkeley aktualnie zarządzany przez PostgreSQL Global Development Group. Przez długie lata trudniej dostępny na hostingu współdzielonym jednak sytuacja zaczyna się powoli zmieniać i w Polsce jest już kilka firm które alternatywnie oferują ten SBD. Wynikało to głównie z większego poziomu wiedzy jaki był potrzebny administratorom aby poprawnie i bezpiecznie obsłużyć cały system, więcej problemów sprawiała konfiguracja użytkowników oraz połączeń do bazy. A ponieważ baza Postgres była trudniej dostępna, wiele projektów korzystało z MySQL, nie było potrzeby konfiguracji i koło się zamykało. Nie zmienia to jednak faktu, że cały projekt jest dużo bardziej skomplikowany i z bazy korzystają użytkownicy wymagający, potrzebujący dokładniejszego wsparcia dla ANSI SQL.

Wersję dla Windows w pakietach 32 i 64 bit można pobrać ze strony enterprisedb.com. Instalator posiada mniej opcji niż ten dostępny dla MySQL i w zasadzie najbardziej powinna nas interesować część odpowiedzialna za kodowanie znaków czyli “locale”, na zdjęciu poniżej.

Instalator, oprócz samej bazy PostgreSQL, zawiera w sobie również narzędzie do zarządzania pgAdmin.

Baza Postgres uruchamia się domyślnie na porcie 5432 a dwa najważniejsze pliki konfiguracyjne to:

  • pg_hba.conf – odpowiedzialny za konfigurację dostępu użytkowników do baz danych
  • postgresql.conf – konfiguracja silnika bazy danych

Domyślnie otrzymujemy dostęp tylko i wyłącznie lokalny, dla administratora którym jest użytkownik postgres. Osobom pracującym na bazie MySQL może być początkowo trochę trudno przyzwyczaić się do nowych pojęć i odmiennego podejścia do kwestii konfiguracji i dostępu. W bazie PostgreSQL kluczową rolę odgrywają schematy, wewnątrz których umieszczamy tabele, widoki czy procedury. Schematy możemy tworzyć dowolnie (np. według potrzebnej funkcjonalności jak forum, blog) i jest to kwestia indywidualnych preferencji. Domyślnym schematem jest public do którego dostęp mają wszyscy tak więc tworząc nowy projekt pamiętaj aby zmienić uprawnienia lub skasować schemat.

W folderze instalacyjnym, w katalogu bin znajdziemy narzędzia do obsługi naszego silnika. Możemy sprawdzić czy jesteśmy w stanie zalogować się do bazy za pomocą polecenia:

psql.exe -U postgres -W

Po wpisaniu hasła możemy wylistować dostępne schematy.

postgres=# \dn
   Lista schematów
 Nazwa  | Właściciel 
--------+------------
 public | postgres
(1 wiersz)

Gdyby serwer odrzucił próbę połączenia należy sprawdzić wpisy w pliku pg_hba.conf.

Podsumowanie

Artykuł opisuje wyłącznie sam proces instalacji baz MySQL i PostgreSQL dlatego naturalną koleją rzeczy powinno być dla Ciebie czytelniku zajrzenie do dokumentacji obu projektów. Posiadasz uruchomione już silniki ale nie pracują one wydajnie. Należy poprawić ręcznie pliki konfiguracji, dopasować do fizycznych możliwości komputera na którym są uruchomione. Warto też rozejrzeć się jakie jeszcze narzędzia dostępne są na rynku, gdyż te zawsze zwiększają naszą produktywność i ułatwiają pracę. Istnieje kilka zewnętrznych (płatnych) projektów jak chociażby Navicat, nie musimy polegać tylko na aplikacjach dostarczonych przez producenta. Najważniejsze to nie bać się nowości i wyzwań. A w razie niejasności warto zadawać pytania, do czego serdecznie zapraszam.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.