R-05-07.doc

(222 KB) Pobierz
PLP_Rozdział5_M ySQL

Rozdział 5. MySQL

Zdecydowaliśmy wcześniej, że MySQL nie będzie idealnym rozwiązaniem dla bazy danych obsługującej naszą aplikację. Istnieją jednak zastosowania, gdzie ta popularna baza danych spełnia znakomicie swoją rolę — tam, gdzie ważna jest szybkość działania i nie trzeba używać transakcji lub innych zaawansowanych właściwości języka SQL. Dlatego właśnie chcemy przedstawić bazę danych MySQL.

W tym rozdziale omówimy instalację MySQL, a następnie zajmiemy się następującymi zagadnieniami:

q       Podstawowe polecenia używane przez administratora podczas instalacji MySQL.

q       Główne różnice między wspomaganiem języka SQL w PostgreSQL i w MySQL.

q       Dostęp do bazy danych MySQL z programu w języku C.

Instalacja i zarządzanie

Instalacja MySQL jest bardzo prosta. Jeżeli w danej dystrybucji Linuksa nie ma kopii dystrybucyjnej MySQL, to można ją pobrać ze strony macierzystej http://www.mysql.com. Znajdują się tam zarówno pakiety skompilowane (w tym także RPM), jak i pliki źródłowe dla wielu systemów. W zasadzie wstępnie skompilowane pakiety powinny całkowicie spełniać oczekiwania, ale jeśli ktoś chce skompilować je we własnym zakresie, może pobrać wersję źródłową.

Pakiety skompilowane

Pakiety RPM są aktualnie rozpowszechniane w czterech częściach:

q       Główny pakiet serwera (ang. main server package) o nazwie:

 

MySQL-<wersja>.<architektura>.rpm

Zawiera on główne pliki binarne i instrukcje oraz wielojęzyczne pliki pomocnicze. Ten pakiet trzeba zainstalować.

q       Pakiet kliencki (ang. client package) o nazwie mającej następującą postać:

 

MySQL-client-<wersja>.<architektura>.rpm

Zawiera on podstawowe programy klienta, które mają współpracować z serwerem. Programy te tworzą oddzielny pakiet, ponieważ w przypadku instalacji na kilku komputerach pracujących tylko jako klienty bazy MySQL nie trzeba instalować składników serwera na wszystkich komputerach.

q       Pakiet zawierający składniki współdzielone (ang. shared component package) o nazwie:

 

MySQL-shared-<wersja>.<architektura>.rpm

zawierający współdzielone biblioteki wymagane przez niektóre klienty.

q       Pakiet rozwojowy (ang. development package) o nazwie:

 

MySQL-devel-<wersja>.<architektura>.rpm

zawierający pliki nagłówkowe i dodatkowe biblioteki potrzebne przy budowie aplikacji, które komunikują się z serwerem MySQL.

Jeżeli ktoś decyduje się na tworzenie programów korzystających z dostępu do bazy MySQL, to powinien na swoim komputerze zainstalować wszystkie wyżej wymienione pakiety.

Skrypt instalacyjny automatycznie tworzy wstępną bazę danych. Potrzebny będzie także skrypt o nazwie mysql służący do uruchamiania i zatrzymywania serwera, przechowywany w katalogu init.d. Najlepszym sposobem na odszukanie plików bazy jest sprawdzenie zawartości tego skryptu. Są tam podane standardowe ścieżki i definicje, np. po zainstalowaniu binarnego pakietu RPM w dystrybucji Red Hat pewien fragment skryptu mysql o nazwie shell variables wygląda następująco:

 

bindir=/usr/bin

datadir=/var/lib/mysql

pid_file=/var/lib/mysql.pid

mysql_daemon_user=mysql # Run mysql as this user.

Jak widać, jest to łatwe do zrozumienia. Podczas instalacji jest również tworzony użytkownik o nazwie „mysql”, w imieniu którego będzie uruchamiany demon serwera MySQL. W zależności od wersji skrypt instalacyjny może od razu uruchomić serwer. Sprawdzamy to za pomocą następującego polecenia:

 

$ ps -el | grep mysql

Jeżeli będą widoczne jakieś procesy mysqld, oznacza to, że serwer został uruchomiony. Jeżeli tak nie będzie, to należy uruchomić skrypt mysql (z katalogu init.d) z parametrem start jako użytkownik mysql. W zależności od dystrybucji polecenie może wyglądać jak niżej:

 

# su - mysql

$ /etc/rc.d/init.d/mysql start

Budowanie z plików źródłowych

Instalacja z plików źródłowych jest tylko trochę trudniejsza niż instalacja pakietów binarnych. Po pobraniu i rozpakowaniu plików źródłowych należy użyć polecenia:

 

$ ./configure --help

W ten sposób sprawdzamy, czy trzeba zmieniać jakieś opcje konfiguracyjne. Przy założeniu, że ustawienia domyślne są wystarczające, sekwencja poleceń używanych do kompilacji i instalacji serwera jest następująca:

 

$ ./configure

$ make

$ su -

# make install

Jeśli wszystko przebiegnie prawidłowo, to należy uruchomić (jako root) skrypt instalacyjny  scripts/mysql_install_db w celu wstępnego zainicjowania serwera:

 

# scripts/mysql_install_db

W zależności od wersji MySQL skrypt może uruchamiać automatycznie serwer bazy danych. Jeśli tak nie jest, wówczas należy uruchomić serwer ręcznie za pomocą skryptu mysql.server umieszczonego w katalogu z plikami pomocniczymi. Skrypt mysql_install_db tworzy niektóre wymagane tabele bazy danych i inicjuje uprawnienia do plików. Ma on prostą budowę i zainteresowani mogą przejrzeć jego zawartość, chcąc się dokładniej zorientować, co on robi.

Przed zakończeniem działania skryptu pojawi się komunikat informujący o sposobie automatycznego uruchomienia MySQL podczas rozruchu systemu. Oprócz tego pojawi się przypomnienie o konieczności ustawienia hasła przez użytkownika bazy MySQL o nazwie „root”. Jest to dosyć mylące, ponieważ w MySQL użytkownik o nazwie root jest administratorem serwera bazy danych. Jeżeli te komunikaty nie pojawią się, to nie należy się tym przejmować i w razie potrzeby odszukać je w skrypcie instalacyjnym.

Ostatnią czynnością podczas instalacji z plików źródłowych jest skonfigurowanie serwera w taki sposób, aby mógł on być automatycznie uruchamiany i zatrzymywany przez system. W katalogu z plikami pomocniczymi (support-files) można znaleźć pomocny skrypt mysql.server, który należy skopiować do katalogu init.d, a następnie utworzyć dowiązania do odpowiednich plików w rc.d. Jako alternatywny sposób uruchamiania można zawsze użyć ręcznego wywołania tego skryptu z parametrem start lub stop. Za każdym razem należy upewniać się (podobnie jak w przypadku bazy PostgreSQL), czy przed wyłączeniem systemu został zatrzymany serwer bazy danych.

Konfiguracja poinstalacyjna

Jeżeli wszystko przebiegło poprawnie, to wówczas mamy utworzoną domyślną konfigurację za pomocą skryptu mysql_install_db i serwer uruchomiony w trybie demona za pomocą skryptu z init.d. Sprawdzimy teraz działanie serwera:

 

$ mysql -u root mysql

Powinien pojawić się komunikat „Welcome to the MySQL monitor” i za nim znak zachęty mysql>. Oznacza to, że serwer działa; jednocześnie widzimy, że każdy może się z nim połączyć i uzyska uprawnienia administratora. Pracę kończymy wpisując polecenie quit.

Można sprawdzić inaczej, czy serwer działa, używając do tego polecenia mysqladmin:

 

$ mysqladmin -u root version

Otrzymujemy wówczas informację nie tylko o tym, czy serwer działa, ale także o jego wersji i czasie pracy.

Jeżeli podczas korzystania z mysql nastąpi przerwa w połączeniu z bazą, to najpierw należy sprawdzić, szukając procesów mysqld za pomocą polecenia ps, czy serwer faktycznie działa. Jeśli serwer nie działa, ale jesteśmy pewni, że był uruchamiany, to można próbować użyć programu safe_mysqld z opcją --log. W katalogu, w którym była zainstalowana baza MySQL (najczęściej jest to /var/lib/mysql), powstanie wówczas plik logu o nazwie takiej jak nazwa komputera z końcówką .log.

Jeżeli serwer działa, ale nie można się z nim połączyć, to przeglądając skrypt mysql_install_db albo init.d/mysql należy sprawdzić, gdzie została zainstalowana baza danych. Zazwyczaj jest to katalog /var/lib/mysql w podkatalogu mysql. Powinny być tam pliki o nazwach mających końcówki .frm, .ISD i .ISM.

Jeżeli to się nie uda, to można próbować zatrzymać serwer, ręcznie usunąć pliki bazy danych i uruchomić ręcznie skrypt mysql_install_db w celu ponownego utworzenia bazy. Potem należy ponownie uruchomić serwer. Jest nadzieja, że tym razem wszystko się uda, ale jeśli tak nie będzie, to należy poszukać dodatkowych informacji na temat wyszukiwania błędów w dokumentacji dostarczanej w pakiecie MySQL. Jeżeli był instalowany pakiet binarny, to dokumentacja znajduje się zapewne w katalogu /usr/doc/MySQL-<wersja>. Można także sprawdzić informacje w Internecie na stronie MySQL.

Bardzo kłopotliwy błąd powstaje wówczas, gdy uprawnienia do plików bazy danych nie są zgodne z uprawnieniami użytkownika mysql tworzonego automatycznie podczas instalacji albo gdy demon mysqld został uruchomiony w imieniu użytkownika o niewłaściwym identyfikatorze. W takim wypadku można połączyć się z bazą, ale nie udaje się uruchomić innych programów, np. mysqladmin i mysqlshow. Trzeba wówczas dokładnie sprawdzić atrybuty plików bazy danych i użytkownika, który uruchomił proces mysqld, ponieważ błąd prawdopodobnie jest spowodowany ich niedopasowaniem. Właścicielem wszystkich plików bazy danych powinien być użytkownik mysql.

Kolejne zadanie polega na nadaniu hasła administratorowi bazy danych uprawniającego go do dostępu do serwera. Służy do tego następujące polecenie mysqladmin:

 

$ mysqladmin -u root password nowe_haslo

Nadaliśmy w ten sposób początkowe hasło dostępu „nowe_haslo” i próba połączenia z bazą się nie uda, chyba że nada się hasło użytkownikowi:

 

$ mysql -u root -psecretpassword mysql

Zwróćmy tu uwagę na trochę dziwną składnię: między literą p a faktycznym hasłem nie może być spacji. Ostatni parametr, czyli mysql, jest nazwą bazy danych. Jeżeli hasło nie zostanie wpisane (czyli wystąpi tylko opcja -p), to mysql zażąda jego podania. Ponieważ podawanie hasła w wierszu poleceń nie jest bezpieczne (inni użytkownicy mogą je zobaczyć np. za pomocą polecenia ps), to lepiej jest używać następującej postaci tego polecenia, nie wpisując hasła:

 

$ mysql -u root -p mysql

Baza zażąda wówczas hasła. Po uruchomieniu mysql można sprawdzić, czy istnieje testowa baza danych używając polecenia:

 

mysql> select host, db, user from db;

Powinniśmy otrzymać coś takiego:

 

+------+----------+------+

| host | db       | user |

+------+----------+------+

| %    | test     |      |

| %    | test\_%  |      |

+------+----------+------+

2 rows in set (0.00 sec)

Aby zakończyć pracę z mysql, należy użyć polecenia quit.

Zarządzanie bazą MySQL

W pakiecie MySQL znajduje się kilka programów pomocniczych wspomagających zarządzanie bazą danych. Najczęściej używany jest program mysqladmin, ale zanim przejdziemy do omawiania sposobu tworzenia programów-klientów, omówimy skrótowo jeszcze kilka innych programów administracyjnych.

Polecenia

Wszystkie polecenia oprócz mysqlshow mogą mieć trzy standardowe argumenty:

q       -u nazwa_użytkownika,

q       -p [hasło],

q       -h nazwa_komputera.

Argument -h jest używany przy łączeniu się z serwerem bazy danych działającym na innym komputerze i na komputerze lokalnym zawsze można go pominąć. Jeżeli argument -p jest podany bez hasła, to zakłada się, że w danym poleceniu MySQL hasło nie jest potrzebne.

isamchk

Jest to program pomocniczy służący do sprawdzania i naprawy tabel bazy danych MySQL. Należy go uruchamiać w imieniu pseudoużytkownika (ang. pseudo-user) utworzonego przez MySQL, przechodząc do odpowiedniego podkatalogu bazy danych, która ma być sprawdzana. Aby np. sprawdzić bazę fud, należy przejść do katalogu /var/lib/mysql/fud. Program isamchk ma wiele opcji, które zostaną wypisane po uruchomieniu go bez parametrów.

Ogólnie mówiąc, jeżeli chcemy sprawdzić wszystkie tabele w danej bazie, to program ten należy uruchomić z jakimiś opcjami, podając dodatkowo parametr *.ISM. Najważniejsze opcje wypisane są niżej:

 

-a

Analiza plików.

-e

Rozszerzone sprawdzanie.

...

Zgłoś jeśli naruszono regulamin