KnowHow mysql


MySQL KNOW HOW
Zarządzanie bazami danych MySQL
Przyjemna praca
Blogi, wiki, galerie obrazów  więk-
szość aplikacji z interfejsem WWW
potrzebuje bazy danych. Przedsta-
wiamy kilka podstawowych sztu-
czek, które wystarczą, by stać się
administratorem bazy MySQL.
OLIVER FROMMEL
ermin  administrowanie bazami da- dzia. Po opanowaniu korzystania z klientów chęty mysql> kończymy średnikiem. Jeśli
nych brzmi bardzo poważnie i od znakowych MySQL nie będzie problemu przed zakończeniem wprowadzania polecenia
Trazu wzbudza respekt  zwłaszcza, z używaniem dowolnego klienta GUI, takiego wciśnięty zostanie klawisz Enter, program wy-
że opisywany dalej MySQL [1] wykorzysty- jak KMySQLAdmin [2], MySQL Navigator świetli -> wskazując, że jeszcze coś należy
wany jest przez duże firmy. Nie ma się jed- oraz mysqlcc, który jest programem produ- wpisać. Wpisanie \q powoduje zakończenie
nak czym przejmować, zwykłe aplikacje biu- centa bazy danych  to tylko część opartych programu.
rowe wymagają często dużej wiedzy i umie- o GUI programów administracyjnych.
jętności, tymczasem zarządzanie MySQL Klient mysql, uruchomiony bez żadnych Tworzenie bazy danych
może być całkiem proste. parametrów, wykorzysta bieżącą nazwę użyt- Ściśle rzecz biorąc, MySQL nie jest  bazą da-
Niniejszy artykuł koncentruje się na pod- kownika do połączenia się bez hasła z lokal- nych , ale systemem zarządzania bazami da-
stawowych czynnościach administracyjnych, nym serwerem MySQL. Parametr -u umożli- nych (DBMS). Innymi słowy, MySQL może
wymaganych przez większość aplikacji wia użycie innej nazwy użytkownika, nato- jednocześnie zarządzać wieloma bazami da-
WWW wykorzystujących bazy danych. Za- miast -p wymusza monit o hasło. Może po nim nych (grupami tabel), np. użytkownicy mogą
cznijmy jednak od procedury instalacji opcjonalnie następować nazwa bazy danych, stworzyć na jednym serwerze MySQL różne
(patrz Ramka  Instalacja ). z którą ma nastąpić połączenie. Jeśli np. chce- bazy danych do zarządzania swoimi kolekcja-
Istnieje kilka narzędzi administracyjnych my uzyskać dostęp do bazy jako root (z ha- mi CD i listami adresowymi. Wpisując show
wykorzystujących interfejs graficzny (GUI). słem), używamy następującego polecenia: databases; w kliencie mysql, otrzymamy listę
Pamiętajmy jednak, że programy konsolowe istniejących baz danych. Do tworzenia nowej
dołączone do MySQL, takie jak np. opisany mysql -u root -p mysql bazy danych wykorzystujemy program my-
poniżej mysql, są bardzo wygodne i łatwe do sqladmin. Jest to standardowe narzędzie słu-
opanowania. Korzystanie z klienta znakowe- Jak na program terminalowy, mysql jest łatwy żące do administracji MySQL. Bazę możemy
go wymaga takiej samej wiedzy jak w przy- w użyciu. Posiada historię poleceń, którą użyt- utworzyć poleceniem:
padku GUI, a przynajmniej nie trzeba się kownicy mogą przeglądać naciskając strzałkę
uczyć struktury menu i okien danego narzę- w górę. Polecenia wprowadzane po znaku za- mysqladmin create pic_db
www.linux-magazine.pl Wrzesień 2004 65
MySQL
KNOW HOW
Ramka 1: Instalacja Ramka 2:
Zapomniane hasła
Instalacja MySQL jest łatwa, ponieważ nie- 9.i386.rpm (skrypty i dane wykorzystywane
mal wszystkie dystrybucje zawierają tę bazę do testów wydajności), mysql-devel-
Jeśli zapomnimy hasła administratora bazy
danych. Jeżeli nie masz jej zainstalowanej, 3.23.58-9.i386.rpm (pakiety dla programi-
danych (czyli zwykle użytkownika root), to
wykorzystaj menadżera pakietów swojej stów), mysql-jdbc-3.0.8-2.noarch.rpm (ba-
nie będzie można wykorzystywać konta ad-
dystrybucji do wyszukania i dodania pakie- zodanowy interfejs dla Java), mysql-jdbc-t-
ministratora do łączenia się z bazami da-
tów MySQL. Wskazana jest instalacja omcat-3.0.8-2.noarch.rpm (sterownik dla
nych. Na szczęście możliwe jest uruchomie-
wszystkich pakietów, włącznie z tymi dla serwera Tomcat) i mysql-server-3.23.58-
nie MySQL w trybie, w którym program
programistów, które zwykle mają w nazwie 9.i386.rpm (właściwy serwer MySQL).
ignoruje tabele zawierające uprawnienia.
devel lub dev. Wymagane są one do kom-
Należy uruchomić MySQL w podany poni-
SUSE posiada podobny zestaw pakietów,
pilacji kodu zródłowego wielu programów.
z tym że w tej dystrybucji monitor znajdu- żej sposób i zmienić hasło bazy danych dla
Przykładowo, MySQL w Fedora 2 składa się je się w pakiecie mysql-client, a bibliote- roota:
z następujących pakietów: mysql-3.23.58- ka w mysql-shared. Najważniejszym pli-
safe_mysqld --skip-grant-tables
9.i386.rpm (biblioteka MySQL, klient i inne kiem konfiguracyjnym serwera MySQL
mysqladmin -u root flush-U
narzędzia), mysql-bench-3.23.58- jest /etc/my.cnf.
privileges password  nowe_haslo
Jeśli MySQL wymaga podania hasła, używa- domyślnego administratora serwera baz da- mysql> flush privileges;
my tej samej opcji co w przypadku klienta, nych z pełnymi uprawnieniami. Skrypt my-
czyli -p, np. mysqladmin -p create pic_db. Tak sql_install_db może posłużyć do stworzenia Jak już wspomnieliśmy, pierwsze polecenie
naprawdę bazę można utworzyć z poziomu tabel systemowych (m.in. zawierających nadaje wszystkie uprawnienia do bazy danych
programu mysql np.: uprawnienia), gdy baza danych jest pusta po o nazwie pic_db użytkownikowi pic_user  bę-
instalacji lub uległa uszkodzeniu. Oczywiście dzie on musiał podawać hasło haselko, aby po-
mysql> create database pic_db; należy też natychmiast po instalacji ustawić łączyć się z bazą. Wpis @localhost oznacza, że
hasło administratora bazy: użytkownik ten może łączyć się z serwerem je-
Usunięcie bazy danych wymaga wprowadze- dynie z lokalnej maszyny. Aby zezwolić na
nia analogicznej komendy z parametrem drop mysqladmin -u root U zdalny dostęp, należy w tym miejscu wprowa-
zamiast create. password 'haselko' dzić nazwę hosta lub adres IP. Tematy związa-
Aby użyć określonej bazy danych, wpisz ne z bezpieczeństwem wykraczają poza zakres
w kliencie use baza_danych. Od tego momen- Pracując z kilkoma bazami danych, najwygod- materiału przedstawianego w tym artykule,
tu MySQL będzie pracował z wybraną bazą niej utworzyć dla każdej z nich użytkownika niemniej warto przemyśleć sposób, w jaki bę-
danych i wszystkie wykonywane od tej pory o nazwie takiej samej jak nazwa bazy danych. dzie wykorzystywana baza danych. Jeśli np.
polecenia i zapytania będą się do niej odno- Wiele aplikacji WWW wymaga podania na- zezwolimy innym maszynom na dostęp do na-
sić. Jeśli chcemy edytować tabele systemowe zwy i hasła użytkownika, który ma uprawnie- szego serwera, być może trzeba będzie zabez-
MySQL (np. po to, by zmodyfikować upraw- nia do wydawania zapytań SQL, tworzenia lub pieczyć go stosując np. firewall-a. Najbez-
nienia użytkowników), najpierw wybieramy usuwania tabel w ramach danej bazy. Jeśli pieczniejszą metodą jest dopuszczenie tylko
bazę danych use mysql;, jeśli ta operacja się użytkownik, któremu przyznajemy prawa, nie lokalnego dostępu  wystarczy to dla większo-
nie powiedzie, wyświetlony zostanie komuni- istnieje, MySQL stworzy go automatycznie: ści aplikacji WWW, gdyż są one najczęściej
kat błędu ERROR 1046: No Database Selec- uruchamiane na tej samej maszynie. Dwa pro-
ted. W celu wyświetlenia tabeli w wybranej mysql> GRANT ALL ON pic_db.* TOU gramy dołączane do pakietu MySQL mogą
bazie danych wpisujemy show tables;. pic_user@localhost IDENTIFIED U okazać się bardzo przydatne do konfiguracji
BY 'haselko'; zabezpieczeń: mysql_setpermission, służący
Zarządzanie użytkownikami
Administrator bazy danych MySQL nie musi
Tabela 1: Ważne narzędzia
mieć w Linuksie uprawnień roota. Większość
Narzędzie Opis
dystrybucji definiuje użytkownika root jako
mysql Klient (zwany też monitorem MySQL)
mysqladmin Narzędzie administracyjne służące do tworzenia baz danych, zmian haseł itp.
mysql_setpermission Zarządzanie uprawnieniami
mysqlaccess Wyświetlanie uprawnień
mysqlcheck Sprawdza, optymalizuje i naprawia tabele
mysqldump Generuje pliki zawierające strukturę i zawartość baz danych w formie pliku tekstowego
mysqlhotcopy Narzędzie służące do tworzenia kopii baz danych  na gorąco , podczas gdy serwer MySQL jest
uruchomiony
mysqlimport Importuje pliki o określonej strukturze, np. wartości oddzielone przecinkami
myisamcheck Sprawdza i naprawia tabele
mysqlshow Wyświetla strukturę bazy danych
mysql_config Wyświetla położenie plików nagłówkowych, bibliotek, wersję MySQL etc.
Rysunek 1: Klient mysql to program łatwy
w obsłudze.
66 Wrzesień 2004 www.linux-magazine.pl
MySQL KNOW HOW
Pliki tekstowe ułatwiają wprowadzanie
rozbudowanych definicji tabel. Klient My-
SQL wykorzystuje takie pliki na wiele sposo-
bów. Po pierwsze, jeśli klient jest urucho-
miony do załadowania pliku zewnętrznego,
można użyć polecenia source nazwa pliku
(albo krócej \.). Można też użyć tradycyjnego
przekierowania z linii poleceń, tak aby
klient pobrał dane z pliku.
mysql < sqldata.txt
W ten sposób można wczytywać do MySQL
pliki wygenerowane przez mysqldump (Ta-
bela 1).
Zwykle każda tabela posiada tzw. klucz
podstawowy (primary key). Jest to pole,
Rysunek 2: Nowy program producenta bazy MySQL z graficznym interfejsem użytkownika mysqlcc. które nie może pozostać puste, ponieważ
umożliwia ono dostęp do każdego wiersza
do zarządzania uprawnieniami, oraz my- sanie edit uruchamia edytor tekstowy, w któ- tabeli. Na ogół zawiera ono numer seryjny,
sql_access  do przeglądania zaprezentowa- rym można wpisywać serie zapytań SQL. który nie może być zmieniany, w przeci-
nych w czytelnej formie bieżących uprawnień. Zmienna środowiskowa EDITOR pozwala na wieństwie do innych pól w tabeli. MySQL
określenie używanego edytora. wykorzystuje atrybut AUTO_INCRE-
Tworzenie tabel Aby wyświetlić strukturę tabeli, można MENT, aby automatycznie wstawiać nu-
Tworzenie tabel jest podobne do tworzenia użyć w kliencie znakowym polecenia descri- mer dla każdego kolejnego wiersza. Doda-
baz danych czy użytkowników, jednakże be (Rysunek 3): nie do siebie tych dwóch elementów spowo-
w tym wypadku należy dodatkowo opisać duje, że nasz przykład będzie wyglądał jak
strukturę tabeli. Każda tabela składa się mysql> describe pic_info; poniżej:
z pewnej liczby pól, w których będą przecho-
wywane pózniej dane. Typy danych określają
Listing 1: Przykład użycia języka SQL
rodzaj przechowywanych przez pole danych:
mysql> INSERT INTO pic_info (file, format) VALUES ('heaven.jpg', 'JPG');
np. tekst, pojedyncze litery, liczby dziesiętne,
Query OK, 1 row affected (0.00 sec)
całkowite itd. Aplikacje WWW najczęściej
tworzą tabele samodzielnie, dlatego jedyne co
mysql> INSERT INTO pic_info (file, format) VALUES ('earth.gif', 'GIF');
należy zrobić, to stworzyć bazę danych, użyt-
Query OK, 1 row affected (0.00 sec)
kownika oraz określić hasło. Spójrzmy na pro-
sty przykład bazy danych z fotografiami:
mysql> select * from pic_info;
+----+------------+--------+-------+
mysql> CREATE TABLE
| id | file | format | date |
-> pic_info (
+----+------------+--------+-------+
-> file VARCHAR(20),
| 1 | heaven.jpg | JPG | NULL |
-> format CHAR(3),
| 2 | earth.gif | GIF | NULL |
-> date DATE);
+----+------------+--------+-------+
2 rows in set (0.00 sec)
Zmienna VARCHAR oznacza łańcuch (litery,
cyfry,..) o zmiennej długości. W tym przykła-
mysql> SELECT * FROM pic_info WHERE format = 'JPG';
dzie jego długość została ograniczona do 20
+----+------------+--------+-------+
znaków. Zmienna CHAR(3) oznacza dokład-
| id | file | format | date |
nie trzy znaki. DATE jest formatem daty, któ-
+----+------------+--------+-------+
ry MySQL wyświetla jako 'RRRR-MM-DD',
| 1 | heaven.jpg | JPG | NULL |
czyli 2004-08-31 dla 31sierpnia 2004. MySQL
+----+------------+--------+-------+
oferuje duży wybór typów danych, zostały one
1 row in set (0.03 sec)
dokładnie opisane w dokumentacji [3]. Bar-
dzo wygodne w zarządzaniu tabelami są na-
mysql> UPDATE pic_info SET date = '2004-07-22' WHERE file = 'heaven.jpg';
rzędzia GUI  korzystając z nich użytkownicy
nie muszą się martwić o odpowiednie przecin-
mysql> DELETE FROM pic_info WHERE id = 1;
ki i nawiasy. Także klient znakowy posiada al-
ternatywny tryb wprowadzania poleceń: wpi-
www.linux-magazine.pl Wrzesień 2004 67
MySQL
KNOW HOW
Ramka 4:
Bezpieczeństwo w SUSE
SUSE dodaje do MySQL narzędzie TCP
wrapper tcpd. Umożliwia to użytkownikom
określenie adresów IP lub nazwy hostów,
które mają możliwość łączenia z bazą da-
nych. Hosty z uprawnieniami dostępu mu-
szą zostać dodane do /etc/hosts.allow, pod-
czas gdy /etc/hosts.deny zawiera listę ho-
stów pozbawionych uprawnień. W celu
umożliwienia maszynie o adresie IP
192.168.1.1 uzyskania połączenia, dodaje-
my do /etc/hosts.allow następujący wiersz:
mysqld: 192.168.1.1
Kolejnym krokiem jest dodanie do pliku
/etc/hosts.deny wpisu uniemożliwiającego
dostęp ze wszystkich innych adresów:
mysqld: ALL
Rysunek 3:Klient mysql wyświetla strukturę tabeli pic_info w bazie danych pic_db.
Wykonanie polecenia man 5 hosts_access
spowoduje wyświetlenie dokumentacji na
mysql> CREATE TABLE fów możemy dołączyć numery ID fotografii
ten temat. Pamiętajmy, że MySQL wymaga
-> pic_info ( danego fotografa. Mimo pozorów, projektowa- wprowadzenia zezwolenia na dostęp z in-
-> id INT AUTO_INCREMENT, nie baz danych nie jest trywialnym zadaniem nych hostów przy wykorzystaniu instrukcji
GRANT, tak jak opisaliśmy to powyżej
-> file VARCHAR(20), i wykracza poza zakres tego artykułu.
w sekcji  Zarządzanie użytkownikami .
-> format CHAR(3),
-> date DATE, Zapytania
-> PRIMARY KEY (id)); SQL  Structured Query Language  stan-
daryzowany język zapytań, umożliwiający tematyce mogą z łatwością wypełnić całe bi-
Stosowanie bazy danych zaczyna mieć sens, zapisywanie, manipulowanie oraz odczyt blioteki. Na szczęście pierwsze kroki nie są
gdy łączymy wiele tabel, pozwalając w ten spo- danych w tabelach. MySQL oczywiście trudne  zarządzanie bazą danych nie wy-
sób na efektywne przechowywanie danych. wspiera ten język. Mimo że inne języki pro- maga ukończenia studiów informatycznych,
W naszym przykładzie mogłoby to oznaczać gramowania lub programy GUI umożliwia- ponieważ MySQL i dołączone go niego na-
stworzenie tabel przechowujących dane foto- ją pracę bez znajomości SQL, warto poznać rzędzia są funkcjonalne i łatwe w użyciu.
grafa, opisy fotografii, a nawet same fotogra- jego podstawy. Głównymi poleceniami Uruchamianie gotowych aplikacji WWW
fie. Zamiast przechowywać szczegóły dotyczą- SQL są: SELECT, INSERT, UPDATE jest łatwe  stąd już tylko mały krok do
ce fotografa w tabeli, której się obecnie przy- i DELETE. Listing 1 pokazuje ich wyko- przygotowania własnej aplikacji bazodano-
glądamy, do tablicy zawierającej dane fotogra- rzystanie na przykładzie wcześniej oma- wej. Bliższe informacje na ten temat można
wianej tabeli. znalezć w Internecie i innych artykułach
Instrukcja INSERT wstawia rekord do Linux Magazine [6]. %
Ramka 3:
tabeli. Wstawianie rekordów zwykle nie wy-
Kłopoty licencyjne
maga określenia wszystkich pól, niemniej
INFO
Fedora jest jedną z niewielu dystrybucji, któ-
potrzebny będzie klucz podstawowy (pri-
[1] Strona domowa MySQL:
re nie zawierają bieżącej wersji MySQL 4.
mary key). W tym przypadku MySQL sam
http://www.mysql.com
Przyczyną tego jest fakt zmiany przez firmę
zajmie się kluczem głównym, o ile istnieje
MySQL licencji przy przejściu z wersji 3 do 4.
[2] KMySQLAdmin:
pole AUTO_INCREMENT. Instrukcja SE-
Zamiast liberalnej licencji LGPL, baza da-
http://www.alwins-world.de/programs/
LECT, wykorzystująca maskę (*), wyświe-
nych jest obecnie rozprowadzana na licencji
kmysqladmin/
tla wszystkie wiersze tabeli, WHERE wpro-
GPL (GNU Public License) [4]. GPL jest
[3] Typy danych MySQL:
bardziej restrykcyjna, nie pozwala ona pro- wadza ograniczenie liczby wyświetlanych
http://dev.mysql.com/doc/mysql/en/
gramom wydawanym na innych licencjach
wyników. W tym przypadku SELECT wy-
Column_types.html
wykorzystywania jakiejkolwiek części My-
świetli tylko te wiersze, które mają JPG
[4] Licencja GNU:
SQL. Programy te również muszą być wol-
w polu format. UPDATE zmienia istniejące
http://www.gnu.org/copyleft/copyleft.html
nym oprogramowaniem w rozumieniu defi-
pola w wierszach i, podobnie jak SELECT,
nicji terminu GPL,w odróżnieniu od LGPL. [5] Zagadnienia związane z licencją Fedory:
jest ograniczany przez WHERE. Analogicz-
W ten sposób firma MySQL próbuje zmusić http://www.internetnews.com/dev-news/
nie DELETE usuwa całe wiersze, w tym
komercyjnych użytkowników do kupowania article.php/3358061
przypadku wiersz z ID równym 1. Wartość
komercyjnych licencji na bazy danych. Za-
[6] Wykonywanie kopii zapasowej baz
ta została przyznana przez funkcję AU-
mieszczenie MySQL 4 spowodowałoby do-
danych MySQL, Thomas Wolfer,
TO_INCREMENT.
datkowo konflikt z licencją pakietu PHP [5].
Linux Magazine 6/2004
Bazy danych to temat rzeka, książki o tej
68 Wrzesień 2004 www.linux-magazine.pl


Wyszukiwarka

Podobne podstrony:
function mysql error
systemy operacyjne cw linux apache mysql
Typy danych w MySQL
function mysql fetch row
PHP6 i MySQL 5 Dynamiczne strony WWW Szybki start ph6ms5
function mysql tablename
PHP i MySQL Dla kazdego
function mysql errno
MySQL Mechanizmy wewnętrzne bazy danych
MySQL Podstawy msqlpo

więcej podobnych podstron