Caratteristiche di MySql

E' un Data Base Relazionale che usa la tecnica dei file ISAM per memorizzare i dati

Vantaggi di mysql:

Svantaggi:

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: 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: In definitiva, nella fase iniziale solo l'utente root del sistema può collegarsi al DB tramite socket (localmente) assumendo l'identità dell'utente root di 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:
  1. quali permessi si concedono
  2. su che cosa vengono concessi
  3. a chi vengono concessi
  4. da quale computer può avvenire la connessione
  5. 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
Avanti