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