R-05-07.pdf

(575 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:
Podstawowe polecenia używane przez administratora podczas instalacji MySQL .
Główne różnice między wspomaganiem języka SQL w PostgreSQL i w MySQL .
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:
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ć.
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.
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.
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:
Zgłoś jeśli naruszono regulamin