HOME
DO_STR_GLOWNEJ_WYSZUKIWARKI
 
 
MySQL

 

Pobierz spakowaną witrynę gorzow-wlkp.pl/linux

Jeżeli pragniesz poznać Linuksa Mandrake (obecnie Mandriva), to... dobrze trafiłeś. Witryna została zauważona przez twórców magazynu KOMPUTER ŚWIAT 5/2004(141) str. 46 poprzez umieszczenie linku oraz magazynu CHIP 4/2004 (str.114) poprzez umieszczenie artykułu opisującego ten serwis internetowy. Jak na hobbystyczną stronę o Linuksie to miłe ;) Acha... na stronie mandrakelinux.pl/informacje podano też link z opisem cytuję "duży zbiór praktycznych informacji o Mandrake" (mam ją w swoim archiwum - klub.chip.pl/twarogal).

Zapraszam do zadawania pytań na FORUM oraz mailem. Chętnie udzielę (bezpłatnie) odpowiedzi. Oficjalne ceny za jedną poradę na stronie MandrakeSoftPL (mam ją w moim archiwum z dnia 2.05.2004) wahają się od 20 do 350 zł.

 


 

Autor artykułu Kamil Twarogal

 

*

 

Spis treści:

  1. WSTĘP
  2. URUCHOMIENIE SERWERA MySQL ORAZ KLIENTA MySQL
  3. LOGOWANIE
  4. TWORZENIE BAZ DANYCH
  5. TABELE
  6. TWORZENIE UŻYTKOWNIKA MySQL
  7. WYPEŁNIANIE TABEL DANYMI

 

*

 

Baza danych plus PHP (oparte na serwerze www np. Apache) to narzędzia umożliwiające zbieranie i przetwarzanie danych. Na dzień dzisiejszy mamy wersje programów zarówno na Windows, jak i Linuksa oraz (co oczywiste) na Uniksy.
Pod Windows problemem (dla nowicjuszy) może być konfiguracja poszczególnych programów (MySQL, Apache z modułem PHP), by ładnie współpracowały. Rozwiązaniem wydaje się być projekt KRASNAL, zawierający instalkę z już skonfigurowanymi programami. Działa na starym Win9x, WinNT i najnowszym Windows. Najmniej stabilnie pracuje na Win9x.

Uwaga: komputer na którym instalujesz MySQL musi posiadać kartę sieciową (lub modem łączący z Internetem), by na niej mógł pracować odpowiednio skonfigurowany interfejs sieciowy. Komputery pracujące w sieci (zarówno od dostawcy Internetu jak i pracujące w domowej sieci) mają automatycznie (np. poprzez DHCP) ustawione parametry typu: adres IP, maskę sieci, nazwę komputera itd. Wówczas nie powinniśmy mieć problemów z pracą MySQL. Gorzej, gdy mamy komputer odłączony od sieci (karta sieciowa jest wówczas w komputerze niezbędna i trzeba "na sucho" ustawić interfejs sieciowy).
Rozwiązanie problemu na przykładzie Win98SE umieściłem w tej notatce.
Problem dotyczy też Linuksa - wówczas trzeba utworzyć nowy interfejs sieciowy z wymyślonym, fikcyjnym adresem na eth0 (karta sieciowa). Adres IP: 192.168.000.002, Maska 255.255.255.000, Broadcast 192.168.000.255, ewentualna Brama: 192.168.000.001 (w Mandrake/Mandriva pomoże nam w tym druid drakgw, czyli "UTWÓRZ NOWY INTERFEJS SIECIOWY").

 

*

 

Niniejszy artykuł pisałem opierając się na Linuksie Mandrake 10.1 (obecnie Mandriva), co nie powinno mieć większego znaczenia, gdyż MySQL można instalować na każdym systemie operacyjnym: Windows, Linux, Unix. Przyjąłem, że dane wpisujemy i odczytujemy pracując na kliencie MySQL (wydając odpowiednie polecenia w powłoce tekstowej). Klient i serwer są na tym samym komputerze (to ważne), czyli logujemy się na klienta MySQL klepiąc po klawiaturze podłączonej do serwera (ew. łączymy się tunelem ssh).

Odradzam jednoczesną naukę PHP i MySQL. Polecam w pierwszej kolejności zaznajomić się z teorią baz danych (tu MySQL).

Uwaga: user root używany do obsługi serwera MySQL nie ma nic wspólnego z systemowym userem root poznanym podczas prac na Linuksie - ma inne hasło i inne zadania. Zbieżność nazw (moim zdaniem niezbyt udana) jest związana z określeniem usera o najwyższych prawach dostępu. Na niniejszej stronie mamy więc do czynienia z systemowym userem root oraz z userem root od MySQL.

Zwróć uwagę na plik z historią poleceń .mysql_history , który jest umieszczony w katalogu domowym usera, czyli np. /home/antek lub /root . Może tam znaleźć się hasło jako pozostałość po logowaniu.

Średnik ; kończący wpis oznacza (w MySQL) koniec polecenia i jest bardzo ważnym elementem! Bez niego zlecenie nie zadziała. Uwaga na znaczek ' (na klawiszu ze znakiem cudzysłowia).

W Linuksie Mandrake/Mandriva serwer MySQL uruchamiamy odwołując się do skryptu startowego: /etc/rc.d/init.d/mysqld (z parametrami np. start, stop, restart). Klienta uruchamiamy poprzez plik /etc/rc.d/init.d/mysql (dodając parametry np. -u -p -h). Do tematu powrócę poniżej.

 

*

 

Uruchomienie serwera MySQL


Podczas instalacji Linuksa Mandrake/Mandriva wybierz serwer MySQL (zostaną automatycznie dodane inne pakiety np. klient mysql). Przyjmuję, że interfejsy sieciowe na komputerze są skonfigurowane (patrz notatka na początku tej strony). Zaloguj się w systemie jako systemowy user root i uruchom serwer MySQL zleceniem:

/etc/rc.d/init.d/mysqld start (lub stop, restart) (wciśnij klawisz ENTER)

Uwaga: serwer MySQL można automatycznie włączać podczas startu systemu zaznaczając właściwą opcję po wydaniu zlecenia: drakxservices. Więcej o autostarcie tutaj.

 

*

 

Uruchomienie klienta MySQL
(na tym samym komputerze co zainstalowano serwer MySQL)


Jako systemowy zwykły user (nie systemowy root!) np. antek wykonaj zlecenie:
mysql (wciśnij klawisz ENTER)

lub jeżeli nie wyjdzie, to:
cd /etc/rc.d/init.d/ (wciśnij klawisz ENTER)
mysql (wciśnij klawisz ENTER)

Powyższe uruchomienie klienta MySQL uda się wyłącznie, gdy user root MySQL nie ma jeszcze ustawionego hasła, a tak jest np. tuż po zakończeniu instalacji systemu. Zdołałeś zalogować się do serwera MySQL. Wylistuj dostępne bazy danych (powinno być ich kilka) zleceniem:

mysql>show databases; (wciśnij klawisz ENTER)
Zwróć uwagę na średnik na końcu zlecenia!

Jeżeli zobaczyłeś prostą tabelkę, to znaczy, że możesz zacząć naukę baz danych MySQL.

Pracę klienta MySQL zakończysz zleceniem exit.

Jeżeli zalogujesz się do serwera MySQL, to przez cały czas prac z lewej strony będzie widoczny napis mysql - stąd na niniejszej stronie umieściłem przed każdym zleceniem wpis mysql>

 

*

 

LOGOWANIE

 

Przyjmuję, że serwer MySQL automatycznie włącza się po starcie systemu. Działasz na jednym komputerze jako systemowy user np. antek.

Ze względów bezpieczeństwa w pierwszej kolejności ustaw userowi root (tego od MySQL) jakieś hasło. Wykonaj:

cd /etc/rc.d/init.d/ ENTER
mysql ENTER

Jesteś zalogowany jako root (ten od MySQL). Ustaw hasło rootowi (temu od MySQL) zleceniem:
mysql>set password = password ('jakieshaselko'); ENTER
Uwaga na średnik ; na końcu zlecenia. Ważne jest położenie (lub brak) spacji w zleceniu. Znaczek ' znajdziesz na klawiszu ze znakiem cudzysłowia.

Wyloguj się zleceniem exit ENTER

Zaloguj się na nowo, ale tym razem rozbudowanym zleceniem:
mysql -u root -p (ENTER i podaj hasło roota od MySQL)

Nie wolno wpisywać hasła bezpośrednio w polecenie!!! np. mysql -u root -p hasło; , gdyż zostanie odnotowane w pliku ~/mysql_history i będzie można je wykraść.

Uwaga: W niektórych dystrybucjach Linuksa w pliku ~/mysql_history zostanie odnotowane hasło nawet po prawidłowo wykonanym logowaniu: mysql -u root -p (ENTER i podaj hasło roota od MySQL). Trzeba więc byc uważnym i kasować zawartość pliku z historią (skryptem lub ręcznie).

Gdy znasz nazwę bazy danych nad którą będziesz pracować, to możesz od razu zalogować się i wskazać domyślną bazę danych:
mysql -u root -p nazwabazydanych (ENTER i podaj hasło roota)
Zwróć uwagę, że na końcu zlecenia nie ma średnika ;

Uwaga: jeżeli podczas logowania nie podasz domyślnej bazy danych, to zrób to po zalogowaniu zleceniem:
mysql>use nazwabazydanych;   ENTER
Uwaga na średnik ; na końcu zlecenia.

W zależności od konfiguracji serwera MySQL czasami będziesz musiał podczas logowania podać adres hosta (komputera). Wypróbuj poniższe zlecenia. Zwróć uwagę, że na końcu zlecenia nie ma średnika. "kaziu" to user MySQL.
mysql -u kaziu -p -h localhost   ENTER
lub
mysql -u kaziu -p -h 127.0.0.1   ENTER
lub
mysql -u kaziu -p -h 192.168.1.1   ENTER
lub adres IP i nr portu (tu 3306):
mysql -u kaziu -p -h 217.96.171.101:3306   ENTER
W ostateczności wypróbuj zlecenie:
mysql kaziu@localhost -p   ENTER

Parametr -u oznacza, że po spacji podamy nazwę usera (np. root), parametr -p oznacza, że user ma hasło, -h oznacza, że po spacji podamy adres (lub nazwę) hosta. Wylogujesz się zleceniem exit

Stosuj zasadę, że uruchamiasz klienta mysql z komputera na którym działa serwer mysqld. Jeżeli musisz to zrobić z odległego komputera, to uruchom szyfrowany tunel ssh i po przejęciu shella zwykłego usera odpal na linuksowym serwerze klienta mysql. Osobiście próbowałem zdjąć zabezpieczenia w moim Mandrake/Mandriva i logować się na serwer MySQL z klienta w domowej sieci. Dotarłem do odpowiednich opcji w konfigu MySQL, udostępniłem na firewallu. Straciłem kilka dni i nic. Po prostu Mandrake/Mandriva ma szereg dodatkowych zabezpieczeń (co jest dobre na wypadek włamu), których nie publikuje w darmowych poradach. Z drugiej strony może i dobrze, że są zabezpieczenia. Przecież MySQL to jedynie silnik bazodanowy. Do wprowadzania danych lub wyprowadzania kwerend należy używać narzędzi typu php.

 

*

 

TWORZENIE BAZ DANYCH

 

Baza danych zbudowana jest z nazwy oraz tabelek, stąd w pierwszej kolejności utworzymy nazwę dla naszej bazy danych, a dopiero potem tabelki podporządkowane tylko tej bazie danych. Pamiętaj, by w nazwach baz danych (i tabelkach) nie wprowadzać polskich liter typu śćźżąóń oraz spacji (zamiast niej można dać dolną kreskę _ ). Zwróć uwagę na średnik ; na końcu zlecenia. Jesteś zalogowany jako root (ten od MySQL).

Wylistuj bazy danych (ich nazwy) zleceniem:
mysql>show databases;   ENTER

Dodaj nową nazwę bazy danych (utwórz nową bazę danych) zleceniem:
mysql>create database nazwabazydanych;   ENTER

Wylistuj ponownie bazy danych, a następnie usuń bazę danych zleceniem:

mysql>drop database nazwabazydanych;   ENTER

 

*

 

Uwaga: bazy danych oraz tabelki wykonuj pod rootem (tym od MySQL). Dopiero na koniec prac utwórz zwykłego usera (tego od MySQL), nadaj mu hasło, odpowiednie prawa (np. do zapisu, odczytu itd.) - opis tworzenia usera jest poniżej. Od tego momentu (czyli wprowadzania danych i zwykłej pracy w bazie danych) nie należy używać roota (tego od MySQL), działając wyłącznie pod zwykłym userem (tym od MySQL).

 

*

 

TWORZENIE TABEL

 

Będąc zalogowanym jako zwykły systemowy user np. antek zaloguj się jako jako root (ten od MySQL) do serwera MySQL - opis powyżej. Następnie wykonaj zlecenia (zwróć uwagę na średnik ; na końcu zleceń):

mysql>create database klienci;   ENTER
mysql>use klienci;   ENTER

Utwórz tabelkę nazwiska w bazie danych klienci jednym zleceniem:

mysql>create table nazwiska (   ENTER
mysql>id int not null auto_increment,   ENTER
mysql>opis text,   ENTER
mysql>name varchar(25),   ENTER
mysql>primary key(id));   ENTER
Zwróć uwagę na ustawienie nawiasów (), przecinków , oraz położenie spacji.

Została utworzona w bazie danych klienci tabela nazwiska, a w niej trzy kolumny: numeracja id rekordów (z opcjami: int - o tym za chwilę, not null czyli "nigdy puste", auto_increment czyli utomatycznie nadawana numeracja +1), opis (z ustawionym typem danych text), name (z ustawionym typem danych varchar 25 znaków). Klucz ustawiono na kolumnę id.


Zobacz, czy tabelka istnieje zleceniem:
mysql>show tables;   ENTER

Wyświetl strukturę (czyli kolumny) tabeli nazwiska:
mysql>describe nazwiska;   ENTER

Zlecenie select wyświetla dane. Na razie mamy nową, pustą tabelę, więc nie ma w niej danych.

Usuń tabelkę nazwiska zleceniem:
mysql>drop table nazwiska;   ENTER

 

*

 

Trochę teorii o bazach danych i tabelkach

 

Tabelki możemy teoretycznie budować w sposób dowolny, zaznaczając jedynie, by wpisy były widziane jako literki-cyferki (do tekstu) lub liczby (do późniejszych działań matematycznych). Oczywiście zawsze musi być kolumna z numeracją rekordów, czyli id (nie mylić z numerem kolejnym, ale o tym później). Ten bardzo prosty schemat ma jedną poważną wadę: mała informacja zajmie dużo miejsca. Dlaczego? Ano, każda komórka w danym rekordzie ma zaplanowaną przestrzeń (maksymalną ilość możliwych do wpisania liter-cyfr). Jeżeli wielkość maksymalna wynosi np. 65538 znaków, to prosty wpis np. Alicja zamiast 6 znaków zajmie 65538 znaków. Jeżeli natomiast zaplanujemy komórkę o typie danych np. 30 znaków, to marnotrawstwo będzie znikome. Minusem ograniczania ilości znaków jest odmowa wpisu danych przekraczających wielkość zaplanowaną, stąd koniecznym będzie zaznajomienie się z poniższymi tabelkami typów danych. Nie polecam kucia na pamięć, ale wpis do notatnika lub wydruk by się przydał.

LICZBY CAŁKOWITE

LICZBY ZMIENNOPRZECINKOWE

DATA I CZAS

TEKST

 

OPCJE DOTYCZĄCE W/W TYPÓW DANYCH
 
 
TYP
 
 
ZAKRES WARTOŚCI
 
auto_increment Autonumeracja +1
binary Parametr binary wskazuje, że wpisy są traktowane jako wartości binarne i uwzględniona zostanie wielkość znaków (w innych typach wielkość znaków w polach tekstowych jest domyślnie ignorowana).
default wartosc Określa wartość domyślną narzuconą przez programistę. Przykładem ustandaryzowanej wartości domyślnej jest np. opcja not null czyli "nigdy puste".
not null Określa, czy baza danych ma zaakceptować brak wpisu. W przypadku nie podania wartości not null, MySQL automatycznie zaakceptuje wpis o wartości null (nic).
primary key Bardzo ważny parametr określający kolumnę, która ma zawierać unikalny klucz (w praktyce najczęściej jest to nr id)
zerofill Parametr zmuszający bazę danych do automatycznego uzupełniania pola liczbowego zerami do (określonej w innym parametrze) długości tego pola np. 0000021

 

*

 

Modyfikacje struktury tabel

 

ZMIANA NAZWY TABELI

Będąc zalogowanym jako root (ten od MySQL) ustaw domyślną bazę danych np. klienci zleceniem:
use klienci;   ENTER
Wylistuj tabelki zleceniem:
show tables;   ENTER
Następnie wyświetl strukturę (czyli kolumny) tabelki o nazwie np. nazwiska zleceniem:
describe nazwiska;   ENTER

Zmień nazwę tabelki nazwiska na nazw zleceniem:
mysql>alter table nazwiska rename nazw;   ENTER

Sprawdź wyniki prac zleceniem: show tables;   ENTER

 

DODAWANIE NOWEJ KOLUMNY

Będąc zalogowanym jako root (ten od MySQL) ustaw domyślną bazę danych np. klienci zleceniem:
use klienci;   ENTER
Wylistuj tabelki zleceniem:
show tables;   ENTER
Następnie wylistuj tabelkę o nazwie np. nazw zleceniem:
describe nazw;   ENTER

Będąc zalogowanym jako root (ten od MySQL) i mając ustawioną domyślną bazę danych np. klienci dodaj w tabeli nazw nową kolumnę panienskienazwisko tak, by było położone po kolumnie opis zleceniem:
mysql>alter table nazw add panienskienazwisko varchar(30) after opis;   ENTER
Jeżeli nowa kolumna ma być pierwsza, to zamiast parametru after nazwakolumny daj parametr first

Sprawdź wyniki prac zleceniem: show tables;   ENTER

 

ZMIANA NAZWY KOLUMNY

Zmień (w tabeli nazw) nazwę istniejącej kolumny panienskienazwisko na nową nazwę: pan_nazw zleceniem:
mysql>alter table nazw change panienskienazwisko pan_nazw;   ENTER

 

ZMIANA TYPU DANYCH KOLUMNY

Zmień (w tabeli nazw) typ danych varchar(25) istniejącej kolumny pan_nazw , na varchar(60) zleceniem:
mysql>alter table nazw modify pan_nazw varchar(60);   ENTER

 

*

 

TWORZENIE UŻYTKOWNIKA

 



Masz utworzoną pod rootem (tym od MySQL) bazę danych oraz tabelki wraz z ustalonymi typami danych (opis powyżej). Teraz trzeba utworzyć pod rootem (tym od MySQL) zwykłego użytkownika (tego od MySQL), by za jego pomocą wypełnianiać tabele w bazach danych. Jest to związane z pierwszą zasadą bezpieczeństwa: NIGDY NIE NALEŻY UŻYWAĆ KONTA ROOTA (TEGO OD MYSQL) DO WYPEŁNIANIA TABEL DANYMI!

 

*

 

Tworzenie użytkownika/usera odbywa się po zalogowaniu pod roota (tego od MySQL) omówionym już powyżej zleceniem: cd /etc/rc.d/init.d/ oraz mysql -u root -p (ewentualnie mysql -u root -p nazwabazydanych). Każdy użytkownik może mieć nadane różne prawa.

Oto lista najczęściej nadawanych praw zwykłym userom MySQL. Praktycznie nie ma potrzeby, by nadawać więcej praw do zwykłej pracy nad bazą danych, a prawo np. do kasowania tabeli lub np. tworzenia nowej kolumny lepiej zostawić tylko rootowi (od MySQL).
  • select czyli prawo do odczytu, wyszukiwania i sortowania danych
  • insert czyli prawo do wstawiania nowych rekordów i danych
  • update czyli prawo do zmieniania wartości rekordów
  • delete czyli prawo do kasowania danych

    oraz pozostałe prawa:
     
  • lock czyli blokowanie tabel
  • alter czyli dokonywanie zmian w strukturze tabel
  • create czyli tworzenie nowych baz i tabel
  • drop czyli usuwanie baz i tabel
  • grant czyli nadawanie określonych przywilejów
  • revoke czyli odbieranie przywilejów
  • repair czyli naprawianie uszkodzonych tabel
  • check czyli sprawdzanie tabel i aktualizacja statystyk

    Polecam wydrukować sobie tabelkę z prawami MySQL (plik pdf).

Tworzymy usera MySQL kaziu z hasłem ofarts3ai. Przypominam, że każde polecenie trzeba kończyć średnikiem ; . Znaczek ' jest na klawiszu ze znakiem cudzysłowia.

Tworzenie użytkownika kaziu z hałsem ofarts3ai. Posiada on nadane (grant) wszystkie (all) uprawnienia na wszystkie (*) tabele we wskazanej bazie 'baza1'
mysql>grant all on baza1.* to kaziu identified by 'ofarts3ai';
a jeżeli będą problemy dopisz @localhost do nazwy usera:
mysql>grant all on baza1.* to kaziu@localhost identified by 'ofarts3ai';

Tworzenie użytkownika kaziu z hasłem ofarts3ai. Posiada on nadane wszystkie uprawnienia na wszystkich bazach i tabelach .
mysql>grant all on * to kaziu identified by 'ofarts3ai';

Tworzenie użytkownika kaziu z hałsem ofarts3ai. Posiada on nadane wszystkie uprawnienia na tabelę 'tabela1' w bazie 'baza1'
mysql>grant all on baza1.tabela1 to kaziu identified by 'ofarts3ai';

Można też zamiast all (wszystkie) dać tylko wybrane uprawnienia np:
mysql>grant select, insert, delete, create on * to kaziu identified by 'ofarts3ai';

By dodać istniejącemu użytkownikowi kaziu uprawnienia delete, update:
mysql>grant delete, update on * to kaziu;

By usunąć uprawnienia delete, update:
mysql>revoke delete, update on * from kaziu;

Przydatnym jest, by do każdej bazy był skonfigurowany użytkownik z ograniczonymi prawami (np. tylko select). Ze względów bezpieczeństwa należy do jednej bazy danych utworzyć jednego usera z większymi uprawnieniami (select, insert, update, delete) i jednego z uprawnieniami ograniczonymi (select).

Można też stworzyć uniwersalnego usera zosia z hasłem czytajx, który będzie miał tylko prawo select (pobieranie, sortowanie danych) we wszystkich bazach:
mysql>grant select on * to zosia identified by 'czytajx';

Przykładowe zlecenie tworzące zwykłego usera azat (działającym na tym samym komputerze co zainstalowano serwer MySQL - stąd parametr @localhost), z uprawnieniami do czytania, wprowadzania, korygowania i kasowania danych w bazie danych o nazwie klienci, w tabeli nazwiska. Hasło usera: qworpa. Zlecenie powinno być wpisane w jednej linii.

mysql>grant select, insert, update, delete on klienci.nazwiska to azat@localhost identified by 'qworpa';



Druga zasada bezpieczeństwa: NIE NADAWAJ ZWYKŁEMU UŻYTKOWNIKOWI (OD MySQL) PRAW ALL (WSZYSTKICH) BEZ WYRAŹNEJ POTRZEBY, GDYŻ PRZEJĘCIE GO PRZEZ WŁAMYWACZA DA MU PEŁNIĘ PRAW NAD MySQL (BAZY DANYCH, TABELE, UŻYTKOWNICY, ROOT).

Trzecia zasada bezpieczeństwa: ZAWSZE TWÓRZ MINIMUM DWÓCH USERÓW (OD MySQL) Z RÓŻNYM STOPNIEM UPRZYWILEJOWANIA. W PRZYSZŁOŚCI SKRYPTY PHP OBSŁUGUJ USEREM O OGRANICZONYCH PRAWACH, TAK BY PRZEJĘCIE GO PRZEZ INTRUZA NIE UMOŻLIWIŁO ZNISZCZENIE BAZY. W wielu moich skryptach formularze PHP umożliwiające kasowanie zawartości baz danych są usunięte z konta www i wkładane jedynie na czas prac administracyjnych. Utrudnia to nieprawne przejęcie uprzywilejowanego usera (od MySQL).

 

*

 

Jak sprawdzić nazwy użytkowników w MySQL
oraz
jak sprawdzić prawa pojedynczego użytkownika?


W Linuksie Mandrake/Mandriva jako zwykły systemowy user np. antek zaloguj się pod roota (od MySQL) zleceniem: cd /etc/rc.d/init.d/   ENTER
mysql -u root -p
  ENTER i podaj hasło roota od MySQL

Teraz jako root (od MySQL) wylistuj dostępne bazy danych (powinno być ich kilka) zleceniem:
mysql>show databases;

Jest tam baza danych mysql. Wejdź do bazy danych mysql zleceniem:
mysql>use mysql;

Wylistuj tabele w bazie danych mysql
mysql>show tables;   ENTER

Mamy kilka tabel (ilość może być różna zależnie od wersji serwera MySQL):
  • column_priv czyli uprawnienia do kolumn
  • db czyli uprawnienia do baz danych
  • tables_priv czyli uprawnienia do tabel
  • host czyli uprawnienia hostów do baz danych
  • user czyli opis userów (użytkowników MySQL)

Jesteśmy zainteresowani tabelką opisującą użytkowników. Tabelka ma nazwę user. Wyświetl strukturę (czyli listę kolumn) tej tabeli zleceniem:
mysql>describe user;
Pojawią się wszystkie kolumny zawierające parametry userów: przynależność do hosta, nazwa usera, hasło, przywileje (priv czyli prawa).
Nieszczęśliwie nazwa tabeli user ma taką samą nazwę jak jedna z jej kolumn: user. Dodatkową komplikacją jest to, że KOLUMNY mają tutaj położenie w POZIOMIE.
Przy okazji warto zapamiętać listę przywilejów: select, insert, update, delete, create, drop, reload, shutdown, process, file, grant, references, index, alter.
Parametr TYPE przy user, password informuje nas, że nazwa usera oraz hasło usera może mieć maksymalnie 16 znaków (a przynajmniej tak jest na moim komputerze).

Aby wylistować wszystkich userów MySQL i ich wybrane prawa należy w tabeli user wyedytować kolumnę user oraz po kolei kolumny, które w nazwie mają "_priv" (można też sprawdzić parametr host) za pomocą zlecenia:
mysql>select user, host, select_priv, insert_priv, delete_priv, grant_priv from user;

Aby sprawdzić, czy dany user MySQL: kaziu oraz zosia ma wybrane prawa:
mysql>select user, select_priv, insert_priv from user where user = kaziu and user = zosia;

Oczywiście w powyższym przykładzie wpisałem zapytanie dotyczące kilku praw, ale można wpisać wszystkie. W odpowiedzi uzyskasz ładny wykaz praw (literka Y-yes, literka N-no)

Aby wybrać tylko nazwy userów z tabeli user wpisz jako root (od MySQL):
mysql>select user from user;

 

*

 

Jeżeli w przyszłości nie będziesz mógł się zalogować klientem MySQL, to pamiętaj, że po korekcie w bazie danych mysql i modyfikacji tabeli np. user należy zleceniem flush privileges odświeżyć bufor serwera MySQL.

 

*

 

Jeżeli zapomnimy hasło użytkownika


Jeżeli zapomnimy hasło użytkownika (tego od MySQL) np. kaziu, to jako root (od MySQL) możemy nadać je na nowo (przyjmujemy, że użytkownik MySQL kaziu jest już utworzony):
  • logujemy się z pozycji zwykłego, systemowego użytkownika jako root (od MySQL) zleceniem: cd /etc/rc.d/init.d/ ENTER
    oraz
    mysql -u root -p licznik ENTER

  • następnie wykonujemy zlecenie:
    mysql>grant all on licznik.* to kaziu identified by 'nowe_haslo';
    Uwaga: grant all czyli WSZYSTKIE PRAWA, można zastąpić wybranymi np. grant select, insert, delete, create
    Nazwa bazy danych: licznik, tabelki WSZYSTKIE (*), użytkownik kaziu, nowe hasło: nowe_haslo

 

*

 

WYPEŁNIANIE TABEL DANYMI

 

Powyżej pokazałem jak utworzyć bazę danych MySQL (wraz z tabelkami) oraz jak utworzyć użytkowników MySQL. Pobieranie danych załatwi nam instrukcja SELECT. Struktura tej instrukcji wygląda następująco:
SELECT co_wybrać
FROM z_której_tabeli
WHERE warunki

Czas wypełnić tabelki treścią za pomocą zwykłego użytkownika (tego od MySQL). Powinienem w tym miejscu zaprezentować PHP, czyli narzędzie idealnie nadające się do wprowadzania i odczytu danych. Niestety, pośpiech jest niewskazany i na razie trzeba poznać składnię poleceń MySQL, choćby dlatego, że PHP właśnie tych poleceń używa do pracy.

Przyjmuję, że pracujesz pod Linuksem w powłoce tekstowej. Na tym samym komputerze masz serwer MySQL i klienta MySQL. Na Linuksie jest systemowy (linuksowy) użytkownik antek oraz użytkownik MySQL o nazwie licznik3. Zaloguj się jako antek, a następnie wpisz zlecenie:
cd /etc/rc.d/init.d/ (ENTER)
mysql -u licznik3 -p (wciśnij klawisz ENTER i podaj hasło usera licznik3)
uruchomisz użytkownika licznik3 (tego od MySQL).

 

*

 

 
Ciąg dalszy nastąpi jak będę miał trochę czasu...
 
Acha... Można wpisywać ręcznie (w shellu) polecenia do MySQL oraz można te same polecenia wprowadzić do pliku i skorzystać z wpisu:
mysql -u user -p < plik_z_poleceniami
aby zobaczyć komunikaty MySQL można wpisać:
mysql -u user -p < plik_z_poleceniami > komunikaty

Przydatny jest też projekt PhpMyAdmin. Aby za jego pomocą wpisac komendy mysql (shelowe) wpisz do przegladarki adres:
http://localhost/phpmyadmin/index.php
Zakladka SQL- Wykonanie zapytania/zapytań SQL do bazy danych- wklej treść skryptu z poleceniami.

 

*

 

W katalogu /var/lib/mysql są podkatalogi o nazwach identycznych jak istniejące bazy danych. Przed reinstalacją systemu lub zapobiegawczo np. raz w tygodniu warto kopiować do np. katalogu /archiwum cały katalog /var/lib/mysql, by w przyszłości odtworzyć bazę danych (z userami, hasłami, przywilejami itd.) po np. reinstalacji systemu. Archiwizację można wykonać poprzez crona, który będzie odpalał skrypt o przykładowej treści (wyjaśnienia znajdziesz w artykule o archiwizowaniu):
#!/bin/sh
tar -zcf /archiwum/mysql_`date +%Y.%m.%d`.tar.gz /var/lib/mysql


Oczywiście tradycyjną archiwizację można wykonać zleceniem (działa pod Linuksem i Windows):
mysqldump
Jej zaletą jest niewielka wielkość pliku archiwizacyjnego (w porównaniu ze skopiowanym katalogiem /var/lib/mysql/), gdyż archiwizuje wybrane elementy bazy danych (np. tylko dane, a nie budowę tabel, konta userów itp.).
Zarchiwizowałem kilka stron www na temat mysqldump i umieściłem w paczce rar.

Przydatny jest też projekt PhpMyAdmin. Aby za jego pomocą zarchiwizować bazę danych mysql, wpisz do przegladarki adres:
http://localhost/phpmyadmin/index.php
BAZY DANYCH- TYTUL BAZY- EXPORT-

Notatki z odtwarzania bazy danych pracującej pod Windows, na projekcie Krasnal - opisałem tutaj.

 

*

 

Na koniec wskazówka związana z MySQL. Może się zdażyć, że pozornie bez powodu baza danych padnie. Jedna z potencjalnych przyczyn to... przepełnienie partycji zawierającej katalog /var/lib/mysql przez logi systemowe (o ile zawartość katalogu /var jest montowana na jednej partycji). Co robić?
  • Wylistować partycje zleceniem: mount oraz przeanalizować plik /etc/fstab
  • Wyświetlić listę partycji wraz z ich wielkością, zajętością itd. zleceniem df -h. Pokaże się tabelka z informacjami: ROZMIAR PARTYCJI, UŻYWANE (zajęte), DOSTĘPNE, PROCENT ZAJĘTOŚCI.
    Mając powyższe dane, można ustalić wielkości osobnej partycji montowanej jako /var/log (na logi - u mnie wystarcza 2-3GB) lub lub /var/lib/mysql (na bazy danych mysql - u mnie wystarcza 0,1-0,5GB)

 

*

 

 
twarogal@wp.pl

Autor artykułu Kamil Twarogal

Uwaga: z powodu namnożenia się różnych złodziejskich witryn www, które kopiują moje strony i umieszczają je u siebie wraz z komercyjnymi reklamami (na których zarabiają) informuję, że wszelkie prawa są zastrzeżone.

Uwaga. Aby uniknąć zasysania całej witryny gorzow-wlkp.pl/linux za pomocą programów typu TeleportPro, WebCopier itd. informuję, że udostępniłem spakowaną wersję (w formacie RAR).

 
 

 

 

Witryna była dostępna pod adresami: strony.wp.pl/wp/twarogal , strony.wp.pl/wp/linuxtwarka , twarogal.republika.pl , klub.chip.pl/twarogal oraz gorzow-wlkp.net (w latach 2003/04).

 

 

gorzow-wlkp.pl

Informacje o odwiedzających są rejestrowane i publicznie udostępniane na pod adresem: http://gorzow-wlkp.pl/licznik/