LUGTrieste
http://trieste.linux.it/
Alessandro “jekil” Tanasi
[email protected]
http://www.lonerunners.net/
1
LE BASI DI DATI
●
Database
Una collezione di dati, che contengono le informazioni di
interesse per il nostro sistema informativo
●
Gestore del Database (DBMS Data Base Management System)
Si occupa della corretta gestione dei nostri dei dati (database)
✔
assicura integrità e consistenza
✔
sicurezza
✔
affidabilità e disponibilità
✔
efficienza e gestione errori
✔
condivisione
2
IL MODELLO RELAZIONALE
I dati sono memorizzati in un modello relazionale[1] ideato da Codd[2]
e riassunto nelle sue 12 regole.
Relazione:
●
ogni riga (record) è diversa dalle altre
●
i dati possono essere associati
Studente
Si opera su tabelle
Matricola Nome Cognome
1
Pippo
Rossi
2
Pluto
Verdi
[1] http://www.acm.org/classics/nov95/toc.html
[2] http://en.wikipedia.org/wiki/Edgar_F._Codd
3
PERCHE SCEGLIERE MySQL?
MySQL è un RDBMS[1] general purporse
Velocità
Capacità
Facilità d'uso
Supporto del linguaggio SQL
Connettività e sicurezza
Portabilità
Dimensioni ridotte
Costi (licenza GPL e commerciale)
Open Source
Disponibile per oltre 20 piattaforme
Utilizzato da: NASA, Yahoo, Google Ad, Slashdot, HP, AOL
[1] Affermazione discutibile, ma facciamo finta di niente per il momento :)
4
PRESTAZIONI
Ha prestazioni di tutto rispetto, può confrontarsi con concorrenti
commerciali.
fonte http://www.eweek.com
Test eseguito dalla rivista eWeek nel febbraio 2002
5
INSTALLAZIONE DA BINARI
Esistono binari precompilati con diversi compilatori per molte
piattaforme.
groupadd mysql
useradd ­g mysql mysql
cd /usr/local
gunzip < /PATH/TO/MYSQL­VERSION­OS.tar.gz | tar xvf ­
ln ­s FULL­PATH­TO­MYSQL­VERSION­OS mysql
cd mysql
scripts/mysql_install_db ­­user=mysql
chown ­R root .
chown ­R mysql data
chgrp ­R mysql .
bin/mysqld_safe ­­user=mysql &
Oppure si può utilizzare un gestore di pacchetti se disponibile
apt­get install mysql­server mysql­common mysql­client
6
INSTALLAZIONE DA SORGENTI
Personalizzare e ottimizzare l'installazione, guardare le opzioni
con ./configure --help
groupadd mysql
useradd ­g mysql mysql
gunzip < mysql­VERSION.tar.gz | tar ­xvf ­
cd mysql­VERSION
./configure ­­prefix=/usr/local/mysql
make
make install
cp support­files/my­medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db ­­user=mysql
chown ­R root .
chown ­R mysql var
chgrp ­R mysql .
bin/mysqld_safe ­­user=mysql &
7
FILE DI CONFIGURAZIONE
Nel file di configurazione my.cnf vengono memorizzate le opzioni per
l'avvio del server
#commento
[gruppo]
commenti
nome del programma o del gruppo per cui valgono le
opzioni sottostanti
opzione
--opzione
opzione=valore --opzione=valore
set-variable = variabile=valore
--set-variable variabile=valore
[mysqld]
port=3306
socket=/tmp/mysql.sock
set­variable = key_buffer_size=16M
[mysqldump]
quick
8
FUNZIONAMENTO
I dati* vengono rappresentati sul file system con directory
(database) e file (tabelle).
Datadir
Directory
File
Le prestazioni sono limitate da quelle del file system.
*I dati InnoDB sono memorizzati in modo diverso dall'apposito gestore
9
GLI UTENTI
Ogni utente dispone di propri privilegi.
Le utenze sono memorizzate nel database mysql, al cui interno ci
sono le tabelle di sistema:
user : contiene le utenze e i loro privilegi
db : contiene la lista dei database
host : contiene l'elenco degli host
tables_priv : indica i privilegi sulle tabelle
columns_priv : indica i privilegi sui campi
Per modificare i permessi si utilizza mysqladmin oppure GRANT,
meglio non operare a mano sulle tabelle di sistema, possono non
essere consistenti.
10
REGISTRI E VARIABILI
I registri di log memorizzano gli eventi generati dal DBMS:
registro generale delle query
registro delle query lente
registro degli aggiornamenti (testo e binario)
registro degli errori
Le variabili contengono:
variabili di sistema: indicano come il server è stato configurato
alcune possono essere cambiate a runtime
variabili di sessione: mantenute per ogni client che si connette
variabili di stato: contengono informazioni statistiche
11
SQL : STRUCTURED QUERY LANGUAGE
Specifica come i dati devono essere definiti e come devono essere
manipolati
Controlla il DBMS
Manipola dati
Amministrazione utenti
Facile e naturale da utilizzare
Linguaggio
“universale” per
l'interrogazione di
DBMS.
Alcuni statements:
SELECT nome FROM clienti ORDER BY nome
DELETE * FROM criceti WHERE eta = 1
CREATE TABLE tabella (day DATE NOT NULL, nome VARCHAR(10))
12
TIPI DI DATI
Numerici
INT, FLOAT, DOUBLE, DECIMAL
StringheN
u
CHAR, VARCHAR, BLOB, TEXT, ENUM, SET
Temporali
DATE, TIME, DATETIME, TIMESTAMP
Speciali
Specifiche OpenGIS
ENUM e SET sono enumerazioni, cioè variabili che devono
essere scelte tra dei valori predefiniti, la seconda consente una
scelta multipla
13
TIPI DI TABELLE
ISAM
Vecchio modello ad accesso sequenziale
MyISAM
Maggiore dimensione, migliore gestione indicie e compressione,
portabilità
MERGE
Costrutto logico che incorpora più tabelle MyISAM
BDB
Il gestore metta a disposizione transazioni e recovery automatico
InnoDB
Il gestore metta a disposizione transazioni, locking migliore,
recovery automatico e gestione chiavi esterne
HEAP
Tabelle temporanee tenute in memoria
14
JOIN
Un enunciato che utilizza dati da più tabelle
Join completo
nella parte FROM compaiono più tabelle
SELECT tab1.* , tab2.* FROM tab1 , tab2 WHERE
tab1.ind = tab2.ind
Join sinistro
mostra le righe che soddisfano il join ma anche le righe della
tabella di sinistra
SELECT tab1.* , tab2.* FROM tab1 LEFT JOIN tab2 ON
tab1.ind = tab2.ind
Join destro
mostra le righe che soddisfano il join ma anche le righe della
tabella di destra
SELECT tab1.* , tab2.* FROM tab1 RIGHT JOIN tab2 ON
tab1.ind = tab2.ind
15
INDICI
Un indice serve per trovare facilmente le informazioni.
Da utilizzare su tutti i campi che vengono utilizzati nelle ricerche o join.
Gatto
Mucca
Tartaruga
Animale
Gatto
Mucca
Gatto
Tartaruga
Gatto
si possono avere molti indici per una tabella
indici fulltext
indici su colonne multiple
aumentano le prestazioni nelle ricerca ma le rallentano
nelle modifiche
16
SUBQUERY
Una subquery è una query annidata in una altra
SELECT * FROM tabella1 WHERE colonna1 =
(SELECT colonna2 FROM tabella2)
Vantaggi:
le query possono essere strutturate
un metodo alternativo all'uso dei join
sono facilmente leggibili
in certi casi l'utilizzo delle subquery aumenta le prestazioni
ci risparmia i “salti mortali” con i join
17
TRANSAZIONI
Insieme di query eseguite senza interruzioni
COMMIT (esecuzione), ROLLBACK (annullamento)
BEGIN
#qui facciamo tutte le query
COMMIT
BEGIN
#qui facciamo tutte le query
ERROR 1060 blablabla
ROLLBACK
Tabelle transazionali: BDB, InnoDB
Tabelle non transazionali: ISAM, MyISAM, HEAP
18
CHIAVI ESTERNE
Le chiavi esterne (foreign key) definiscono delle relazioni tra tabelle a
livello logico, cioè una relazione tra un un campo di una tabella e un
campo di un altra. Il DBMS userà queste relazioni per mantenere
l'integrità relazionale.
IdUser Nome
1
Gianni
2
Pippo
3
Gigi
IdUser Fattura
1
AEFRG
3
FGRGE
3
GRSAE
2
GTESA
Ogni fattura deve essere associata ad un utente
Le chiavi esterne aiutano a mantenere la consistenza dei dati
19
CLIENT
20
AVVIO E ARRESTO
mysqld : il demone server
mysqld_safe : uno script che si occupa di gestire in modo sicuro il
demone
­­datadir=directory indica la posizione della directory dei programmi
­­basedir=directory indica la posizione della directory dei dati
­­defaults­file=file legge il file di opzioni indicato al posto di quello di default
­­pid­file=file indica la posizione del file pid
­­socket=file indica la posizione del socket
­­port=numero la porta su cui il server è in ascolto
­­nice=numero il valore di nice con cui viene eseguito il server
L'arresto avviene con il comando mysqladmin shutdown oppure
SHUTDOWN
21
BACKUP
Medoti di backup:
backup fisico a mano (tar ecc..)
utile solo in casi particolari
mysqldump: ritorna una rappresentazione SQL dei database,
molto comoda da usare
mysqlhotcopy: script perl che esegue la copia fisica di tabelle
e db
Controllo delle tabelle:
myisamchk: controlla e ripara
mysqlcheck: controlla, ripara e ottimizza, può essere usato
con il server in esecuzione
22
OTTIMIZZAZIONE
Meccanismi di ottimizzazione automatici:
l'ottimizzatore delle query
la cache delle query
Per i programmatori:
usare gli indici
usare poco il casting e le funzioni
non sprecare spazio
dichiarare le colonne NOT NULL
provare query scritte in vari modi
usare OPTIMIZE TABLE
Per gli amministratori:
aumentare la cache
disabilitare i gestori non usati
compliare con librerie statiche
23
SICUREZZA
Impedire accesso al file system, gli utenti non devono poter
leggere la directory dei dati
Proteggere i file di opzioni
Rimuovere account anonimi (vengono installati di default!!)
Specificare gli host da cui si collegano gli utenti se possibile
Usare connessioni SSL
Volendo il server puo' essere messo in una jail chroot
Se utilizzato il locale il server deve ascoltare solo su localhost
24
PhpMyAdmin
E' un utility di amministrazione
utilizzabile via web, richiede un server
web e il modulo php
Manipolare dati, tabelle, database
Ogni utene gestisce il suo database
Eseguire query SQL
Creazione automatica di query
complesse
Amministrare utenti e privilegi
Esportare dati in formato CSV, XML,
Latex
Effettuare backup/restore dei dati
Monitorare il server
25
MySQLCC
GUI per l'amministrazione
platform indipendent e GPL
amministrazione utenze e tabelle
supporto per server multipli
editor di query
visualizza le immagini nei BLOB
utile per testare e ottimizzare le query
strumento orientato ai programmatori
http://www.mysql.com/products/mysqlcc/
26
MySQL Administrator
facile da utilizzare
multipiattaforma
statistiche in tempo reale
facile ottimizzazione
backup e restore
gestione repliche
gestione variabili server
controllo dei log
strumento orientato ai sistemisti
http://www.mysql.com/products/administrator/
27
QUERY BROWSER
editor di query
utile per testare e ottimizzare
le query
strumento orientato ai
programmatori
http://dev.mysql.com/downloads/query-browser/1.1.html
28
DB DESIGNER 4
strumento grafico per la
realizzazione di schemi logici
query editor
reverse engeneering
version control
vari plugin
purtroppo non supporta le viste
http://www.fabforce.net/dbdesigner4/
29
INTERFACCIAMENTO
Esistono API per tutti i linguaggi
di programmazione più utilizzati,
ad esempio:
● C / C++ / C#
● Java
● Perl
● Python
● Delphi
● Ruby
● PHP
● e molti altri..
Possibilità di includere il
server in modo
embedded
nell'applicazione.
30
ALTA AFFIDABILITA'
Idea: una serie di macchine che condividono gli stessi dati, se una
cade le altre prendono il suo posto
inizialmente i dati sono
replicati su tutte le macchine
gli slave vengono aggiornati
attraverso il binary log del
master
se il master cade gli slave
prendono il suo posto
Vantaggi:
fault tolerance
niente single point of failure
fail over automatico
facilità
31
CLUSTER
Idea: distribuire il carico di lavoro su un pull di macchine
la macchina MGM coordina i nodi
i nodi DBx contengono il database
e soddisfano le richieste
32
MAXDB
Implementazione di MySQL certificata per l'utilizzo con SAP®
studiato per gestire un gran numero di transazioni
supporta le stored procedures
distribuito con interfaccia grafica e web
supporta meno interfacce di programmazione
funzioni di amministrazione (job scheduling, eventi, allarmi)
disponibile per poche piattaforme
usa un protocollo proprietario di rete
33
IL LATO OSCURO
Funzionalità non supportate:
Trigger [*]
Stored Procedure [*]
Viste [*]
-- come commento
Privilegi a livello di record
Mancanza del supporto a particolari tipi di query (ad es. alberi)
Vecchie versioni non supportano:
l'integrità referenziale
le subquery
Potremmo discutere il fatto che MySQL attualmente sia un DBMS
[*] supportato dalla versione 5 attualmente in alpha
34
RIFERIMENTI
“SQL” M. J. Hernandez, Mondadori
“Basi di dati, modelli e linguaggi di interrogazione” P. Atzeni, McGrawHill
“Basi di dati, architetture e linee di evoluzione” P. Atzeni, McGraw-Hill
“MySQL” P. DuBois, Pearson
“SQL The Complete Reference” J. R. Groff, McGraw-Hill
“Foundamentals of database systems” Elmasri/Navathe, Addison
Wesley
“MySQL Reference Manual” http://dev.mysql.com/doc/
35
DOMANDE
DOMANDE ...E POMODORI
Grazie per la Vostra attenzione
36
COPYRIGHT
Questo documento viene rilasciato sotto licenza Alcoolware, la quale non è altro che una normale licenza Creative Commons Attribute­NonCommercial­
ShareALike [1] ma con l'aggiunta che se mi incontrate dobbiamo andare a bere qualcosa.
In sintesi è liberamente distribuibile per usi non commerciali, copiabile e modificabile purchè citiate l'autore e la fonte.
Se volete distribuire questo documento sul vostro sito siete pregati per favore di comunicarmelo in modo che possa spedirvi le nuove versioni.
[1] http://creativecommons.org/licenses/by-nc-sa/2.0/
[
37