MySQL

MySQL e' DBMS relazionale Open Source piu' diffuso al mondo e che non ha nulla da invidiare a sistemi commerciali. I suoi principali punti di forza sono:

Ma torneremo su questo alla fine... come introduzione basta cosi'!

Questo documento e' stato preparato utilizzando la versione 4.1 di MySQL su Linux ma e', mutatis mutandis, valido anche per le altre versioni (N.d.E. verificato fino alla 8.0 introdotta nel 2018). Lo scopo di questa pagina e' quella di introdurre le funzionalita' e caratteristiche si MySQL, maggiori dettagli si possono trovare su questo documento o sul ricchissimo sito ufficiale MySQL (quest'ultimo ovviamente in inglese).

Installazione

Spesso su Linux MySQL e' gia' installato! Se non e' cosi' e' possibile il reperimento del software e l'installazione con un solo comando: apt-get install mysql-server (Debian, Ubuntu, ...) yum install mysql-server (Red Hat, CentOS, ...), o yast -i mysql-server (Suse).
Spesso le distribuzioni Linux contengono versioni datate... per questo MySQL rende disponibili i propri repository Yum con le versioni piu' recenti (cfr. http://dev.mysql.com/downloads/repo/yum/ ).

E' molto semplice anche l'installazione con gli RPM, spesso utilizzati scegliere una precisa versione. E' sufficiente scaricare gli RPM corretti dal sito MySQL. In una configurazione tipica sono necessari solo MySQL-server e MySQL-client:

RPMDescrizione
MySQL-server-version.rpmIl motore della base dati: mysqld
MySQL-client-version.rpmLa parte client (a carattere): mysql

Scaricato il software, per effettuare l'installazione dare i comandi:
# rpm -ila MySQL-server-version.rpm
# rpm -ila MySQL-client-version.rpm

In meno di 5 minuti l'installazione e' conclusa, i servizi attivi, i DB mysql e test creati.
Per controllare i pacchetti installati: rpm -qa | grep -i mysql. Infine, per rimuove i pacchetti il comando e' rpm -e [PKG_NAME].

Utilizzo

L'utilizzo di MySQL e' molto semplice:

$ mysql -u root
mysql> use test;
mysql> show tables;
mysql> create table dummy (c1 char(20));
mysql> show create table emp;
mysql> select * from dummy;

Rispetto ad altri RDBMS MySQL concede molti piu' errori e cerca di eseguire comunque lo statement digitato dall'utente. In caso di qualche problema viene generato un warning ma lo statement viene comunque eseguito.

Oltre che da linea comando e' possibile utilizzare ambienti grafici Client-Server come MySQL Browser:

Start/Stop

L'attivazione/disattivazione dei processi e dell'intero ambiente MySQL non puo' essere effettuata da client e va eseguita dal sistema server. L'RDBMS viene attivato con il comando service mysql start.

Normale amministrazione...

Su ogni RDBMS vi sono una serie di attivita' che ricadono nella normale amministrazione. Come in casa si fa pulizia e si butta la spazzatura tutti i giorni, ... (voi lo fate? io no, ma era cosi' per dire), cosi' su un DB si creano e gestiscono gli utenti, si fanno salvataggi, si ribaltano i dati, si controllano i log, si effettuano le riorganizzazioni, ...

Tutto facile con MySQL e con i diversi tool di supporto a disposizione del DBA (eg. phpMyAdmin)!

Configurazione

Una volta installato MySQL puo' essere utilizzato immediatamente. Pero' le possibilita' di tuning sono diverse.

Un elenco dettagliato dei parametri di configurazione non e' significativo per un documento introduttivo come questo ma e' importante riportare che le opzioni vengono specificate all'avvio su linea di comando o, meglio, inserite nel file /etc/my.cnf.

Una scelta importante e' anche quella dello Storage Engine utilizzato per memorizzazione dei dati. Gli Storage Engine possono essere molto diversi tra loro e forniscono funzionalita' differenti. Per controllare gli Storage Engine disponibili nella propria installazione:

mysql> SHOW ENGINES;
Tra i piu' gli Engine piu' comunemente utilizzati:

Le modalita' di programmazione utilizzabili con MySQL sono molto ampie e complete. Sono supportati i piu' comuni e recenti linguaggi di programmazione. Naturalmente si puo' utilizzare il linguaggio Java accedendo al DB con un driver JDBC Connector.
La configurazione dei client MySQL e' molto semplice poiche' richiede unicamente l'IP/hostname del Server e la porta (3306 come default).

Architettura

L'architettura di MySQL e' semplicissima: vi e' un processo che gestisce un thread per ogni connessione! Per completezza e' riportato anche il processo dello shell di lancio che resta attivo. La struttura dei processi (ps -efa)...

/bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql
/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/...

Gli utenti si collegano a MySQL utilizzando una connessione TCP-IP su una porta socket. Di default la porta utilizzata da MySQL e' la 3306. Il processo mysqld e' in LISTEN su tale porta e quando arriva una nuova richiesta di connessione effettua l'attivazione del thread corrispondente.

MySQL Architecture

Ogni database corrisponde ad una directory posta sotto /var/lib/mysql (o nella directory indicata dal parametro datadir). All'interno della directory si trovano i file relativi ad ogni tabella. La memorizzazione dei dati dipende dallo Storage Engine. E' sempre presente un file tabella.frm che contiene la struttura della tabella, eventuali altri file dipendono dall'Engine di memorizzazione (eg. .frm, .MYD e .MYI per MyISAM, solo .frm per InnoDB).

La struttura fisica dei dati e' molto differente a seconda dell'Engine utilizzato. Con MyISAM e' utilizzata la classica struttura con due file per tabella con tracciato record fisso per i dati e file di indice associato. Con InnoDB i dati dell'intero DB sono posti su un unico grande file e le tabelle sono clusterizzate per chiave primaria. Con l'Archive dati ed indici vengono compressi. Con il Black Hole... non ci sono i dati!

Configurazioni particolari

MySQL puo' essere utilizzato in configurazioni complesse tipicamente necessarie per ambienti in alta affidabilita'. Nel seguito vengono dati alcuni cenni sull'utilizzo della replicazione e del cluster.

La replicazione MySQL presenta diversi vantaggi. Il carico sulla rete non e' elevato, la rete puo' anche avere un'alta latenza (la replica e' asincrona), i server e le connessioni possono essere disattivati e la replicazione riprende automaticamente quando la connessione e' nuovamente possibile. E' quindi possibile utilizzare la replicazione sia per distribuire i dati che per disporre di copie aggiornate dei dati con funzioni di disaster recovery.

Dalla versione 4.1 e' stato introdotto il Data Clustering con lo Storage Engine NDB. Differenti motori MySQL che operano su server distinti accedono ai dati mantenuti allineati tra i diversi storage dall'NDB. In questo caso la configurazione e' Active-Active ed i diversi server MySQL possono essere acceduti tramite un load balancer con notevoli vantaggi prestazionali.

MySQL puo' essere definito come servizio in un Failover Cluster. Tale modalita' non e' nativa del DB ma puo' essere implementata in modo relativamente semplice sui piu' diffusi failover cluster Linux (eg. Heartbeat) e su cluster commerciali. Vengono anche forniti gli Enterprise Agent per Veritas VCS. Naturalmente la configurazione in cluster richiede l'utilizzo di storage condiviso tra i nodi.
E' anche possibile una configurazione con minori requisiti HW utilizzando la replicazione dei dati ed un cluster per la sola definizione dell'IP virtuale per l'accesso al nodo corrente. Anche se si tratta di una soluzione non completamente sicura puo' essere utilizzata come alternativa a piu' complesse soluzioni di disaster recovery.

MySQL

Il motore originale di MySQL (1995) e' costituito da una serie di librerie ISAM per l'accesso ai dati. L'efficenza dell'implementazione, la stabilita' delle releases, la possibilita' di utilizzo in rete e la distribuzione open source ne hanno decretato l'enorme successo. Si tratta del piu' diffuso RDBMS per le applicazioni web.

L'evoluzione di MySQL e' costante. La release 3.23 (2001) ha introdotto le maggiori innovazioni ed e' stata una delle piu' diffuse. Nella versione 3.23 sono stati introdotti l'efficiente Storage Engine MyISAM (3.23.0), la replicazione asincrona (3.23.15), lo Storage Engine InnoDB (3.23.34) con supporto delle transazioni e delle foreign key, ...
La versione 4.0 (2003) ha introdotto le Union ed i savepoint su InnoDB. Molto diffusa e' anche la 4.1 (2004) in cui sono disponibili la funzionalita' di Cluster basata sullo Storage Engine NDB, una maggiore sicurezza nell'autenticazione utente e le subquery.

La versione 5.0 (2005) e' compatibile ANSI SQL:2003 e presenta diverse notevoli estensioni:

Nota "commerciale": il 26 Febbraio 2008 Sun Microsystems ha completato l'acquisizione di MySQL AB.
Nella versione 5.1 (2008) sono stati inseriti il partizionamento, uno schedulatore, un'API per i plugin, la row based replication (la replication MySQL e' statement based), alcune importanti estensioni per il cluster (replication e disk storage), ...
E' stata rilasciata una versione 5.4 con ottimizzazioni specifiche per sistemi multiprocessori (cfr. acquisizione da parte di Sun).
Viene rilasciata, ma solo come versione Alpha, una versione 6.0 che utilizza l'Engine Falcon al posto di InnoDB anche per reagire all'acquisizione di INNOBASE da parte di Oracle.

Il 20 Aprile 2009 Oracle Corp. ha annunciato la firma dell'accordo per l'acquisto di Sun Microsystems. In questo modo acquisisce anche MySQL, concorrente diretto.
Nella versione 5.5 (2010) e' stata introdotta la replicazione semi-sincrona, diversi, significativi miglioramenti prestazionali sull'InnoDB (che diventa l'Engine di default) ed i comandi SQL SIGNAL/RESIGNAL e LOAD XML.
La versione 5.6 esce dopo una lunga attesa (2013) ed introduce un significativo arricchimento del PERFORMANCE_SCHEMA (eg. Host Cache), gli indici Fulltext per InnoDB, un'interfaccia NoSQL (memcache), miglioramenti sulle prestazioni e sulla scalabilita', un incremento sulla sicurezza dei dati nella replicazione, l'introduzione di policy per la gestione delle password.
La versione 5.7 prosegue con miglioramenti sulle prestazioni e sulla scalabilita', con nuove funzionalita' sulla replication e sulla security.
Cambia la numerazione con la versione 8.0 ma prosegue l'evoluzione su sicurezza, prestazioni, JSON, ... Importante anche il supporto delle Common table expressions (WITH) e delle Window functions (OVER).
Dopo una serie di Innovation Release la nuova LTS e' la versione 8.4.

Oltre a MySQL sviluppato da Oracle Corp. e' utile ricordare MariaDB che e' un fork di Monty nato nel 2009 ed Aurora MySQL fornito da Amazon dal 2014 che presentano molte parti in comune ma anche importanti differenze.

L'elenco di tutte le versioni MySQL con le date di rilascio e le principali funzionalita' e' riportato in questo documento.

Punti di forza

E' il momento di ritornare sui vantaggi di MySQL... il semplice e diffusissimo DB Relazionale Open Source

C'e' anche da ricordare che e' ;-( disponibile anche su piattaforma Microsoft...


Testo: MySQL
Data: 15 Giugno 2005
Versione: 1.0.22 - 14 Febbraio 2024
Autore: mail@meo.bogliolo.name