E' un Data Base Relazionale che usa la
tecnica dei file ISAM per memorizzare
i dati
Vantaggi di mysql:
E'
piuttosto veloce, anche con DB di grandi
dimensioni e un numero elevato di utenti
E' abbastanza semplice da usare
E' multipiattaforma, quindi utilizzabile in
diversi sistemi: Unix (Solaris, Aix, ...), Linux
(distribuzioni varie), Windows (9x, NT,
millennium, 2000) Mac, OS ...
I DB possono
essere facilmente spostati da un sistema all'altro
(previo aggiornamento dei permessi)
Esistono numerose utility che
facilitano sia l'accesso
client/server che l'accesso tramite Web
Il sistema dei permessi è estremamente
raffinato (quasi maniacale)
Svantaggi:
Non supporta le
transazioni
Non effettua
automaticamente i controlli sull'integrità
referenziale
Non supporta la
memorizzazione di viste
Non supporta le
subquery
N.B.: le ultime versioni di mysql, in particolare la 4.x, dovrebbero supportare transazioni e integrità referenziale.
(Non le ho ancora provate)
Installazione di mysql
Cosa
installare
E' necessario installare il
server mysql (mysql-server.x.yy.z-t) e, se
si desidera accedere al DB dalla stessa macchina,
anche il client (mysql.x.yy.z.t-t). Se si
installa un client grafico, tipo kmysql
(kmysql-x.yy.z-t) bisogna installare anche il
client a interfaccia carattere, perchè
comunque la GUI si basa sul client
tradizionale. Esistono anche delle
librerie per lo sviluppo e la compilazione
di programmi (mysql-develop.x.yy.z-t) N.B.: i numeri danno il numero di
versione. Server e client possono essere
installati su macchine diverse. Di tutti i
programmi manzionati esistono i pacchetti RPM, che
si installano facilmente dall'interfaccia grafica
(Gnome o KDE) a partire dal file manager facendo
click col pulsante destro e scegliendo la voce di
menù apposita.
Cosa fare dopo
Dopo
aver effettuato l'installazione, bisogna per prima
cosa creare il DB dei permessi. Nel
pacchetto è compreso un apposito script da
lanciare: #> mysql_install_db questo
script va lanciato da root, ma dopo aver creato il
DB bisogna controllare i permessi perchè il
tutto possa funzionare. Per default Mysql
viene lanciato con lo user-id settato: il nome
dell' utente è mysql, gruppo mysql. Non
c'è motivo di cambiare questo
comportamento, dovuto a motivi di sicurezza, anche
se è possibile farlo. Infatti in questo
modo esiste un utente apposito che è
l'unico che può accedere al DB, e solo
questo utente avrà i permessi di lettura e
scrittura sui file del DB. La directory dove
generalmente vengono creati i Data Base è
/var/lib/mysql. Questa directory e tutti i file
contenuti devono essere di proprietà di
mysql, quindi se non è, così bisogna
cambiarli con: #> cd /var/lib # > chown -R
mysql:mysql mysql
A questo punto MySql è pronto per la
creazione dei propri Data Base. N.B.: non è detto che lo script
mysql_install_db parta senza problemi: infatti
potrebbe trovarsi in una directory che non fa
parte del PATH, cioè del percorso di
ricerca degli eseguibili. In questo caso bisogna
effettuare una ricerca del file per individuare il
percorso e poi lanciarlo col percorso
completo. (es: /usr/bin/mysql_install_db) In
alternativa è possibile anche modificare il
PATH, e meglio ancora salvare la modifica in un
file di inizializzazione (tipo rc.local)
Oppure, si può creare un link al file in
una delle directory del PATH.
Configurazione di
Mysql
Lanciare il server MySql
Sulla macchina dove risiedono (o
devono essere creati) i DB, il demone (server)
mysql deve essere attivo per rispondere alle
richieste degli utenti. L'attivazione può
essere fatta manualmente, oppure automatizzata
inserendola negli script di inizializzazione del
sistema. Per ora vediamo l'avvio manuale, che
è gestito dallo script mysql.server,
oppure safe_mysqld, oppure direttamente
lanciando il demone mysqld.
La cosa migliore è usare mysql.server. Il
server può, essere lanciato con :
#> mysql.server start
Per controllare se il server risponde, usare
ilcomando :
#> mysqlshow
che dovrebbe mostrare un elenco dei DB installati,
oppure
#> mysqladmin version
che visualizza informazioni sullo stato del
server N.B.: se lo script non parte, vedere
la nota precedente. Se lo script dà
permesso negato, controllare che abbia il permesso
di esecuzione: per default viene fornito senza, in
modo che si possa decidere se farlo eseguire solo
da root o anche da altri utenti. Se la cosa
risulta toppo complicata, è possibile usare
il comando: #> safe_mysqld&
oppure direttamente:
#> mysqld&
Fermare il
server Mysql
Se il server è stato lanciato
con:
#> mysql.server start
è sufficiente digitare:
#> mysql.server stop
Se invece è stato avviato direttamente,
bisogna usare:
#> mysqladmin -u root shutdown
Amministrazione del server Mysql
Il programma mysqladmin, compreso nella
distibuzione di mysql-server, è utile per
impartire comandi al server MySql.
Il server MySql ascolta per default sula
porta 3306 e fornisce le connessioni ai
client che le richiedono. Ovviamente non
è consentito l'accesso a tutti, e
per questo è necessario un sistema
di autenticazione degli utenti, simile a
quello che abbiamo al momento del login
E' importante capire però che
gli utenti di mysql non hanno niente a
che vedere con gli utenti del sistema:
dal punto di vista del sistema, esiste
un solo utente con il permesso di
accesso ai file dei DB, e di solito ha il nome di
mysql: questo utente gestisce le connessioni, ed
è lui che si occupa di compiere le
operazioni sui files richiesta dagli utenti che si
connettono al DB.
Per default gli script di MySql preparano un DB
dei permessi in modo che:
esiste un utente root senza password che ha
l'accesso completo
qualunque utente (senza password)
ha accesso completo a tutti i DB il cui nome
inizia con test_xxx: questo è utile per
fare delle prove.
La prima cosa da fare in un DB professionale
è inserire una password per l'utente root;
questo può essere fatto col comando:
#> mysqladmin -u root password password
allo stesso modo possono essere cambiate le
password per gli altri utenti
N.B.: dopo aver inserito le password, ogni comando
deve essere seguito dal nome utente e password
come nell'esempio sottostante:
#> mysqladmin -u utente
-ppassword version
#> mysqladmin --user=utente
--password=password version
L'amminstrazione del DB oltre alla gestione delle
password comprende altre funzioni importanti, tra
le quali la possibilità di visualizzare i
processi utente e anche di interromperli.
Creazione di nuovi Data Base
Un data base
è semplicemente una direcory, inizialmente
vuota, in cui inserire poi le tabelle. Per
creare un data base si può usare il
comando: #> mysqladmin [--user=root
--password=password] create
nomeDB e per cancellarlo: #>
mysqladmin [--user=root
--password=password] drop nomeDB
Connessione lato client
La connessione al server MySql può avvenire
in due modi:
localmente tramite socket (presa:
canale di comunicazione tra due processi, client
e server, realizzato tramite un file).
Questo comporta che
l'utente per connettersi localmente
deve avere il diritto di attraversamento
nella directory in cui viene creato il socket
(di solito /var/lib/mysql) N.B.: se non viene specificato un host di
destinazione (sulla riga di comando, tramite
--host=nome), di default viene tentato un
collegamento tramite socket
via rete,
tramite protocollo TCP/IP. Anche l'accesso
locale può avvenire in questo modo,
indicando come computer di destinazione
l'indirizzo di loopback 127.0.0.1 N.B.: per poter effettuare il collegamento,
bisogna che esista almeno un utente che ha il
permesso di collegarsi al DB dal computer host,
che in questo caso viene visto come un qualunque
computer della rete
In definitiva, nella fase iniziale solo l'utente
root del sistema può collegarsi al DB
tramite socket (localmente) assumendo
l'identità dell'utente rootdi mysql.
Il client mysql
Esistono diversi client ad interfaccia grafica che
possono essere installati a parte, ma si basano
tutti sul client tradizionale a linea di comando
che viene fornito col pacchetto di base. Questo
programma tenta una connessione col server
passandogli il nome utente, computer e password
specificati sulla riga di comando, e se la
connessione viene accettata, presenta un prompt
dal qualr si possono inserire i comandi in
linguaggio SQL e ricevere le risposte.
Il comando da impartire è quindi:
$> mysql [--user=nomeutente
[--password=password]
[host=nomecomputer]
Se non vengono forniti parametri, mysql tenta di
connettersi da localhost con un nome utente uguale
all'account di sistema e senza password.
Se la connessione ha successo, si presenta il
prompt:
mysql>
da cui possono inserire i comandi SQL, con
l'avvertenza di terminarli con il ;
Gestione dei permessi
La
gestione dei privilegi di accesso ai DB è
estremamente dettagliata e complessa, anche
perchè non essendovi la possibilità
di creare viste che limitino l'accesso ai dati,
l'assegnazione dei permessi può arrivare
fino al dettaglio delle colonne.
L'assegnazione dei permessi può avvenire
manipolando direttamente il DB mysql
(sconsigliabile) oppure usando il comando GRANT,
che in mysql ha una sintassi non standard. In
ogni caso, per poterlo fare è necessario
avere il permesso di modifica sul DB mysql, quindi
connettersi come utente root (oppure crearne un
altro con i dovuti privilegi).
Creazione
utenti e assegnazione privilegi
Il comando
completo ha la seguente sintassi: mysql> GRANT
permesso [elenco-colonne] [, ...] ON
database.tabella TO 'utente@host'
[IDENTIFIED BY 'password'] [, ...][WITH GRANT
OPTION]; Questo comando specifica:
quali permessi si concedono
su che cosa vengono concessi
a chi vengono concessi
da
quale computer può avvenire la
connessione
se i permessi sono
trasmissibili ad altri
1.
Permessi
Sono validi i seguenti privilegi:
ALL PRIVILEGES
tutte le operazioni
SELECT
interrogazioni (query):
equivale a un permesso di sola lettura
INSERT
inserire righe
DELETE
cancellare righe
UPDATE
modificare dati
USAGE
solo
connessione
CREATE
creare Data Base
DROP
cancellare Data Base
ALTER
cambiare la struttura delle tabelle
INDEX
aggiungere e togliere indici
PROCESS
controllare i processi (connessioni
utente)
SHUTDOWN
'spegnere' il Data Base
FILE
importare tabelle da files
RELOAD
ricaricare la tavola dei permessi
2. Oggetti
Si possono specificare dei nomi di colonna,
oppure (dopo la parola ON) dei nomi di tabella
o di DataBase. Concedere un permesso su un DB
senza specificare le tabelle, significa che il
permesso è esteso a tutte le tabelle,
e il permesso concesso su una tabella
è per tutte le colonne se non
specificato diversamente. N.B.: Si usa il carattere * per specificare
'tutti'. P.es: anagrafe.*, tutte le tabelle
del DB anagrafe, *.* tutte le tabelle di tutti i
DB.
3. Utenti
E' possibile specificare un nome utente preciso,
oppure lasciarlo in bianco per indicare
chiunque. Il nome utente consente anche l'uso
di caratteri jolly: il % equivale a qualunque
gruppo di caratteri (come l' * in MSDOS) e il _
indica 1 carattere qualunque (come il ?).
La
password va specificata dopo la clausola
IDENTIFIED BY, e racchiusa tra apici.
4. Computer
Il nome del computer va
indicato dopo il carattere @. Se questo non è
presente, ma è specificato un nome utente, un
utente con quel nome (e quella password) si può
collegare da qualunque computer.
Anche per i nomi dei computer sono validi i
caratteri jolly specificati prima, (in questo caso bisogna usare le
virgolette: @"%.dominio") e il nome deve seguire la notazione
nome-computer.nome-dominio.suffisso-di-zona che
si usa in internet.
Naturalmente, per una rete locale, sui useranno
gli alias specificati nel file hosts. N.B.: una istruzione del tipo:
GRANT ALL PRIVILEGES ON *.* TO %;
lascia tutti i DB creati con MySql
alla mercè di chiunque da qualunque
computer si connetta.
5.
Trasferibilità dei permessi
La trasmissione
dei permessi può essere effettuata se viene
specificata la clausola WITH GRANT OPTION.
Naturalmente un utente può trasmettere solo i
permessi che ha ricevuto.
Revoca dei permessi
I permessi possono essere revocati con l'istruzione REVOKE:
mysql> REVOKE permesso ON database.tabella FROM 'utente';
Annotazioni sulla connessione
Quando un utente si connette, per prima cosa viene controllato il nome del
computer da cui si connette: la tabella degli utenti (mysql.user) viene
quindi ordinata prima per nomi di computer specifici, poi per quelli più
generici, poi per gli anonimi. Se il nome del computer è uguale, lo
stesso criterio si usa per gli utenti. A questo punto, la prima coppia
incontrata che corrisponde (inclusi i caratteri jolly) viene usata per
l'identificazione.
Se un utente è collegato a un nome di computer generico (per esempio
su tutto un dominio) può capitare che venga identificato
con un altro nome utente, se il computer da cui si collega
prevede un utente con caratteri jolly che potrebbe corrispondere al suo
account. E' necessario quindi che il DB administrator faccia attenzione
alle convenzioni sui nomi dei computer.
Riferimenti: Michele Sciabarrà: Linux e Programmazione
Web - ed. McGrawHill MySQL Reference
Manual