Dok sam bio mladji, lepši, zgodniji, ... pamtio sam sve, izmedju ostalog i dizajn baze, neophodna prava da bi se aplikacija koristila, ... Vremenom su me pritisle obaveze, sitna deca, u svakom slučaju prešao sam na zapisivanje, zapišem ovde, onde, pa kad mi zatreba, osvežim pamćenje pa kao nov. A kako vreme neumitno teče, stićiće i mene, ako već i nije, počeću da zaboravljam gde sam zapisao – valjda je to poslednji stadijum.
Na sreću, relacione (relaciono-objektne) baze podataka odlikuje jedno dobro svojstvo a to je da imaju meta podatke. Meta podaci su podaci o podacima, što u konkretnom slučaju znači nema potrebe da preterujete sa pamćenjima tipa: Miletu sam dao pravo da ažurira podatke, pregledava ali ne i da menja strukturu tabela, ili tipa: tabelu zaposleni kreirao sam sa tim i tim kolonama i sa tom i tom internom strukturom i tim i tim indeksima, ..., već me umorila sama pomisao. E tu sad stupaju meta podaci. Različite baze različitim metodama dolaze do tih podataka. Na primer, kod Oracle baze postoji niz tabela i/ili pogleda, poput ALL_OBJECTS, u kojima su upisani svi objekti baze (tabele, indeksi, procedure, funkcije, ...) i odgovarajućim select naredbama i poznavanjem dictionary-a se dolazi do željenih informacija. Kako je to rešeno kod MySQL, ne gubite nadu, sledi u nastavku, mada bih ja o meta podacima mogao nadugo i naširoko.
Mnoge korisne informacije o MySQL bazi, korisnicima i tabelama se mogu dobiti koristeći neku od SHOW komandi. U zavisnosti od prava (privilegija) koje su vam dodeljene, neke SHOW komande mogu da vam budu nedostupne. root korisnik ili onaj koji ima slične privilegije, svakako čovek od poverenja, može koristiti sve SHOW komande, koje će mu pružiti tražene informacije.
Najčešće korišćene SHOW naredbe uključuje sledeće:
SHOW GRANTS FOR user
SHOW DATABASES [LIKE something]
SHOW [OPEN] TABLES [FROM database_name] [LIKE something]
SHOW CREATE TABLE table_name
SHOW [FULL] COLUMNS FROM table_name [FROM database_name] [LIKE something]
SHOW INDEX FROM table_name [FROM database_name]
SHOW TABLE STATUS [FROM db_name] [LIKE something]
SHOW STATUS [LIKE something]
SHOW VARIABLES [LIKE something]
SHOW GRANTS komanda prikazuje privilegije navedeneg korisnika za navedeni host. Najkorisnija je za proveru statusa nekog korisnika, posebno kada postoji zahtev da se modifikuju postojeće korisnikove privilegije. Na kraju krajeva to je lak način da utvrdite da li korisnik stvarno nema zahtevane privilegije. Na primer da proverimo šta ima korisik mile izdali bi smo:mysql> show grants for mile@localhost;
+-------------------------------------------------------------------------------+ | Grants for mile@localhost |
+-------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mile'@'localhost'
IDENTIFIED BY PASSWORD '*EC24BE67633C4733D1A70ACB3585F0455F0889D8' |
| GRANT ALL PRIVILEGES ON `cdcol`.* TO 'mile'@'localhost' |
+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Ako pak niste root korisnik ili “čovek od poverenja” a niste ni mile, dobićete poruku o grešci. Svi oni kojima se delimično veruje mogu videti samo relevantne informacije vezane samo za svog korisnika. Na primer, mile nije u mogućnosti da vidi informacije o root korisniku.
mysql> show grants for root@localhost;
ERROR 1044 (42000): Access denied for user 'mile'@'localhost' to database 'mysql'
Budite svesni svojih privilegija i ako niste “od poverenja” da ne kažem root korisnik, da na neke od pomenutih komandi nećete dobiti očekivane informacije već će pristup biti limitiran. Ako vam to smeta, pogledajte članak o xampp-u, i postanite kalif umesto kalifa bar na svojoj radnoj stanici.
Informacije o bazama i tabelama
Komada SHOW DATABASES će uraditi baš to, odnosno prikazaće informacije o bazama koje se nalaze na MySQL serveru:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cdcol |
| mysql |
| phpmyadmin |
| test |
| webauth |
+--------------------+
6 rows in set (0.01 sec)
Nakon što odaberete bazu sa kojom ćete raditi (USE database) SHOW naredba se može koristiti za prikaz liste tabela u toj bazi. Ako dobijete drugačiji prikaz nije reč o grešci već o vašim kreativnim sposobnostima:
mysql> show tables;
+----------------------+
| Tables_in_phpmyadmin |
+----------------------+
| pma_bookmark |
| pma_column_info |
| pma_designer_coords |
| pma_history |
| pma_pdf_pages |
| pma_relation |
| pma_table_coords |
| pma_table_info |
+----------------------+
8 rows in set (0.03 sec)
Ako se doda još i OPEN u SHOW TABLES komandu, dobiće se lista svih tabela u kešu, uz informaciju koliko su puta keširane i da li se trenutno koriste:
mysql> show open tables;
+----------+--------------+--------+-------------+
| Database | Table | In_use | Name_locked |
+----------+--------------+--------+-------------+
| mysql | procs_priv | 0 | 0 |
| mysql | db | 0 | 0 |
| mysql | host | 0 | 0 |
| mysql | tables_priv | 0 | 0 |
| mysql | user | 0 | 0 |
| mysql | columns_priv | 0 | 0 |
+----------+--------------+--------+-------------+
6 rows in set (0.00 sec)
Ako SHOW OPEN TABLES prikazuje tabele koje su višestruko puta korišćene a trenutno se ne koriste (in_use=0) izdajte FLUSH TABLES komandu da oslobodite memoriju (pravilo kod svih baza podataka memorije nikad dosta).
Prikupljane informacija o strukturi tabele
Vrlo korisna komanda je SHOW CREATE TABLE, koja uradi ono što bi čovek i očekivao, prikaže SQL komandu koja se koristila pri kreiranju tabele:
mysql> show create table pma_table_info;
+----------------+----------------------------------------------------+
| Table | Create Table |
+----------------+----------------------------------------------------+
| pma_table_info | CREATE TABLE `pma_table_info` (
`db_name` varchar(64) collate latin1_general_ci NOT NULL default '',
`table_name` varchar(64) collate latin1_general_ci NOT NULL default '',
`display_field` varchar(64) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`db_name`,`table_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='Table
information for phpMyAdmin' |
+----------------+----------------------------------------------------+
1 row in set (0.08 sec)
Njena korisnost ogleda se u tome što može biti podsetnik (i to brz) ili brza referenca na naredbu kojom je kreirana neka tabela (u slučaju da vam papirić nije pri ruci). Iste informacije dobijaju se ako bi ste dump-ovali šemu (ali na sporiji i nepregledniji način).
Ako vam je potrebna samo struktura tabele, ne i SQL komanda za kreiranje, komanda je SHOW COLUMNS:
mysql> show columns from pma_table_info;
+---------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| db_name | varchar(64) | NO | PRI | | |
| table_name | varchar(64) | NO | PRI | | |
| display_field | varchar(64) | NO | | | |
+---------------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
SHOW COLUMNS je isto što i DESCRIBE komanda.
SHOW INDEX komanda prikazuje informacije o indeksima odredjene tabele. Sintaksa je:
SHOW INDEX FROM ime-tabele [FROM ime-baze]
Ova komanda pruža dosta informacija, počev od imena kolone do kardinalnosti indeksa. Kolone koje se vraćaju komandom opisane su u tabeli koja sledi:
Ime kolone | Opis |
Table | Ime tabele |
Non_unique | 1 ili 0. 1 - indeks može sadržati duplikate 0 – indeks je jedinstven |
Key_name | Ime indeksa |
Seq_in_index | Redosled kolone u indeksu. Počinje od 1. |
Column_name | Ime kolone koja je deo indeksa |
Collation | Redosled sortiranja za tu kolonu: A – rastući (ascending) Null – ne sortirana |
Cardinallity | Broj jedinstvenih vrednosti u indeksu |
Sub_part | Na parcijalno indeksiranim kolonama, prikazuje broj znakova koji je indeksiran. NULL ako je cela kolona indeksirana. |
Packed | Veličina numeričkih kolona |
Comment | Komentar |
Sledeća komanda koja vraća tabelu prepunu informacijama je SHOW TABLE STATUS. Sintaksa je:
SHOW TABLE STATUS [FROM database_name] LIKE ‘nešto’
Kolone koje se vraćaju komandom opisane su u tabeli:
Ime kolone | Opis |
Name | Ime tabele |
Type | Tip tabele: MyISAM, BDB, InnoDB ili Gemini. |
Row_format | Format smeštanja zapisa: fixed, dynamic ili compressed. |
Rows | Broj redova |
Avg_row_length | Prosečna dužina zapisa |
Data_length | Veličina fajla sa podacima |
Max_data_length | Maksimalna veličina fajla sa podacima |
Index_length | Veličina indeksnog fajla |
Data_free | Broj bajtova koji su alocirani a nisu iskorišćeni |
Auto_increment | Sledeća vrednost koja će biti iskorišćena u auto_increment polju |
Create_time | Datum i vreme kreiranja tabele (datetime format) |
Update_time | Datum i vreme poslednjeg ažuriranja |
Check_time | Datum i vreme kad je tabela poslednji put “proverena” |
Create_options | Sve ekstra informacije koje su bile korišćene kod CREATE TABLE naredbe |
Comment | Bilo koji komentar dodan kada je tabela kreirana. Pored toga, InnoDB tabele će iskoristiti ovu kolonu da daju informaciju o praznom prostoru u tablespace-u. |
Sistemski statusi
SHOW STATUS i SHOW VARIABLES komande pružaju informacije o serveru baze. Sintaksa je baš kao i prethodno napisana, ništa uzbudljivo.
Ono što se desi nakon izdavanja komandi je mnoštvo informacija (i od popa uši). Sreća je da ćemo izdvojiti samo neke
Aborted_connects | Broj neuspelih pokušaja da se pristupi MySQL serveru. Svaki put kad je taj broj različit od nule treba istražiti slučaj. Moguće je da je loša kombinacija username, password u skriptu ili je broj simultanih konekcija postavljen na premalu vrednost. |
Connections | Ukupni broj konekcija na MySQL server od trenutka startovanja istog. |
Max_used_connections | Maksimalni broj konekcija koje su bile simultane od trenuta startovanja servera. |
Slow_queries | Broj upita koji su trajali duže long_query_time (default je 10 sekundi). Ako je broj veći od 1 vreme je da se zabrinete i proverite SQL-ove, razmislite o performansama hardvera ili zovete vatrogasce. |
uptime | U sekundama izraženo koliko server radi. |
Detaljnu listu sa iscrpnim opisima statusa možete naći na: http://dev.mysql.com/doc/refman/5.0/en/show-status.html.
SHOW VARIABLES takodje obiluje, reklo bi se, brdo informacija. Shodno tome izdvojićemo samo neke a o ostalima možete saznati na: http://dev.mysql.com/doc/refman/5.0/en/show-variables.html.
connect_timeout | Prikazuje u sekundama koliko će MySQL server čekati na konekciju dok je ne odbije |
have_innodb | Prikazuje YES ako su InnoDB tabele podržane |
have_bdb | YES ako su Berkeley DB tabele podržane |
max_connections | Dozvoljeni broj simultanih konekcija na MySQL, preko tog broja se konekcije odbijaju |
port | Port na koji MySQL osluškuje kada je startovan |
table_type | Podrazumevani tip tabela, obično MyISAM |
version | MySQL broj verzije |
Ukoliko neki od ovih parametara nije odgovarajući on se može promeniti u konfiguracionom fajlu ili startup komandom (o čemu ću nekom drugom prilikom ako ne zaboravim već o čemu sam hteo).