MySQL

MySQL o Oracle MySQL (/maɪ ˌɛskjuːˈɛl/ "My S-Q-L") è un relational database management system (RDBMS) composto da un client a riga di comando e un server. Ambo i costituenti sono multipiattaforma e sono disponibili ufficialmente su tutte le distribuzioni conosciute, quali Debian, Ubuntu e CentOS, sebbene lo abbiano sostanzialmente sostituito con MariaDB a partire dal 2012.

È software libero pubblicato a doppia licenza, compresa la GNU General Public License, sviluppato per essere il più possibile conforme agli standard ANSI SQL e ODBC SQL. I sistemi e i linguaggi di programmazione che lo supportano sono molto numerosi, fra cui ODBC, Java, Mono, .NET, PHP, Python.

Storia 
Il codice sorgente di MySQL era inizialmente di proprietà della società MySQL AB, veniva però distribuito con la licenza GNU GPL oltre che con una licenza che prevedeva assistenza commerciale. Fino alla versione 4.0, una buona parte del codice del client era licenziato con la GNU LGPL e quindi poteva essere utilizzato anche per applicazioni proprietarie. Dalla versione 4.1 in poi, anche il codice del client è distribuito sotto GNU GPL. Esiste peraltro una clausola estensiva che consente l'utilizzo di MySQL con una vasta gamma di licenze libere.

Nel luglio 2007 la società svedese MySQL AB aveva 385 dipendenti in numerosi paesi. I suoi principali introiti provenivano dal supporto agli utilizzatori di MySQL tramite il pacchetto Enterprise, dalla vendita delle licenze commerciali e dall'utilizzo da parte di terzi del marchio MySQL. Il 16 gennaio 2008 Sun Microsystems ha acquistato la società per un miliardo di dollari, stimando il mercato del database in 15 miliardi di dollari.

Il 20 aprile 2009 alla stessa Sun Microsystems è stata proposta l'acquisizione da parte di Oracle per 7,4 miliardi di dollari. L'accordo, approvato dall'antitrust USA, è poi passato al vaglio degli organi corrispondenti dell'Unione Europea, preoccupati per il conflitto di interessi costituito dai database commerciali Oracle rispetto a MySQL. Michael Widenius, il padre di MySQL, ha lanciato una petizione online per opporsi alla fusione. Nonostante ciò l'Unione europea ha dato parere favorevole e l'acquisizione è stata completata il 27 gennaio 2010.

Il ramo 5.5 è il primo a includere estensioni non Open Source, disponibili solo nella versione Enterprise a pagamento.

A partire dal 2012 diverse distribuzioni Linux e alcuni utenti importanti come Wikipedia hanno iniziato a sostituire MySQL con il fork MariaDB.

Sviluppo 
Fino a  lo sviluppo del programma era opera soprattutto dei suoi sviluppatori iniziali: David Axmark, Allan Larsson e Michael Widenius. Quest'ultimo era il principale autore del codice, oltre che principale socio della , e tuttora coordina il progetto, tra l'altro vagliando i contributi che pervengono dai volontari. I contributi vengono accettati a condizione che il loro autore condivida i diritti d'autore con la .

Caratteristiche 
L'Internet Assigned Numbers Authority ha formalmente assegnato al server MySQL la porta TCP 3306.

Versioni

3.23 
La prima versione alfa del ramo 3.23.x è stata pubblicata nel luglio 1999. La prima  è del gennaio 2001. Nelle versioni 3.23.x sono stati aggiunti i tipi di tabella MyISAM (che rimpiazza il vecchio Isam), HEAP (ora MEMORY), InnoDB e BDB. Inoltre sono state aggiunte la ricerca fulltext e la replica dei database.

4.0 
Nell'ottobre 2001 è stata pubblicata la prima versione alfa del ramo 4.0.x, mentre nel marzo 2003 è entrata in produzione. Le aggiunte più significative sono:
 una cache per le query
 le query di tipo UNION
 DELETE multitabella
 migliorate le tabelle Merge affinché supportino le INSERT e i campi autoincrementanti
 limitazione delle risorse utilizzabili da ogni singolo utente
 variabili d'ambiente reimpostabili con il comando SET
 una libreria per incorporare le funzioni di MySQL in un altro programma

4.1 
La prima versione del ramo 4.1.x risale all'aprile 2003, mentre nell'ottobre del 2004 è entrato in produzione. Le aggiunte più significative sono:
 le Subquery. Queste sono delle query SQL nidificate. Si ha dunque la possibilità di scrivere:
SELECT * FROM tabella1 WHERE colonna1 = (SELECT colonna1 FROM tabella2 LIMIT 1)
 Dati geografici memorizzati secondo il modello OpenGIS;
 I Prepared Statements;
 Le connessioni SSL/TLS;
 Set di caratteri impostabili a livello di database, tabella e colonna; aggiunto il supporto per Unicode (UTF8 e UCS2);
 Commenti a livello di colonna.

5.0 
Il 22 dicembre 2003 viene pubblicata la prima versione della serie 5.0, che è entrata in produzione il 19 ottobre 2005. Le aggiunte più significative sono:
 Le viste, tabelle virtuali ricavate da una query SQL, aggiornabili quando possibile;
 Le stored procedure, un vero e proprio linguaggio di programmazione per interagire con i dati del database. Oltre ai soliti parametri di ricerca e selezione è possibile inserire costrutti [IF... THEN... ELSE], tanto per fare un esempio;
 I trigger, istruzioni SQL che vengono lanciate automaticamente prima o dopo l'esecuzione di determinate query su determinate tabelle
 INFORMATION_SCHEMA, un database virtuale che descrive la struttura di tutti gli altri database; inoltre i comandi SHOW, che anch'essi restituiscono informazioni sulla struttura dei database, sono stati potenziati;
 Il tipo di dati BIT;
 Gestione appropriata del fuso orario (timezone);
 I tipi di tabella Archive e Federated;
 Un'API ben strutturata per sviluppare nuovi tipi di tabelle.

5.1 
La prima versione alfa pubblica è uscita il 29 novembre 2005. Le principali nuove caratteristiche sono:
 Il partizionamento delle tabelle;
 Un'API per scrivere nuovi parser per le ricerche FULLTEXT;
 Gli eventi;
 Replica basata sui dati (anziché sulle query);
 I log possono essere scritti in un database, oltre che nei file di testo;
 Supporto per Xpath;
 Campi AUTOINCREMENT e varie ottimizzazioni per le tabelle ARCHIVE;
 ClusterDB ora può scrivere i dati su disco, oltre che conservarli nella RAM; supporta inoltre MontaVista;
 ALTER TABLE, CREATE INDEX e DROP INDEX sono molto più performanti.

5.2 
La versione 5.2 è in fase alfa e le principali novità sono il nuovo storage engine Falcon e il backup online.
Sul sito di MySQL è scomparso ogni riferimento alla versione 5.2 e le novità che avrebbe dovuto introdurre sono state pianificate per la versione 6.0.

5.4 
Si tratta del primo ramo sviluppato sotto l'egida della Sun, ora Oracle. Non è quindi un caso che questa versione abbia avuto come unico scopo l'ottimizzazione del server su sistemi Solaris e su hardware SPARC, nonché l'ottimizzazione di InnoDB, in particolare della sua configurazione di default che prima aveva notevoli difetti.

5.5 
Si tratta del primo ramo che è divenuto stabile sotto l'egida di Oracle.
La versione 5.5 introduce diverse nuove funzionalità:
 La replicazione semisincrona fornisce una maggiore garanzia sui dati poiché il commit sulla base dati Master attende che almeno uno Slave abbia ricevuto le modifiche;
 Viene introdotto il Performance Schema che contiene numerose viste utili per il tuning della base dati;
 L'Engine InnoDB diventa il default, ne vengono incrementate le prestazioni e viene reso scalabile sui moderni processori multicore.

5.6 
È l'ultima versione pubblicata in produzione. Sono molte, di cui alcune molto attese, le nuove funzionalità della versione 5.6:
 La gestione dei microsecondi e dei millisecondi nei datatype temporali e nei timestamp;
 La possibilità di controllare i dati della Host Cache e i relativi errori;
 Nuove viste, utili per il monitoraggio ed il tuning della base dati, nel Performance Schema e nell'Information Schema;
 La possibilità di escludere alcune directory dalla ricerca come nome di database;
 L'utilizzo di ricerche testuali (FULLTEXT SEARCH) sull'Engine InnoDB;
 Un'interfaccia di tipo memcache su tabelle InnoDB;
 Molte utili estensioni che migliorano la sicurezza della base dati.

5.7 
Questo ramo è in sviluppo. Le novità sono principalmente nello storage engine InnoDB. Il ramo 5.7 introduce anche l'ALTER TABLE online e lo stack degli errori.

6.0 
Questa versione è stata cancellata e parte del codice sviluppato non sarà incluso nelle prossime versioni. Da questo ramo sono state importate alcune delle funzionalità di MariaDB.

Compatibilità 

MySQL, essendo scritto in linguaggio C e C++, è disponibile su molti differenti sistemi operativi tra cui AIX, AmigaOS, BSDi, Digital Unix, FreeBSD, HP-UX, GNU/Linux, macOS, NetBSD, Novell NetWare, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, SGI Irix, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows 2003, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows 7, Windows 8 e Windows 10.

Le piattaforme di riferimento sono Linux e Solaris. La documentazione di MySQL offre comunque un aiuto per chi avesse bisogno di provare a compilare il software su qualsiasi sistema operativo discretamente diffuso.

MySQL utilizza anche i tool automake, autoconf e libtools per aumentare la compatibilità.

Le tabelle di tipo BDB funzioneranno solo sui seguenti sistemi operativi:
GNU/Linux 2.x Intel, Solaris (SPARC and x86), FreeBSD 4.x/5.x (x86, sparc64), AIX 4.3.x, SCO OpenServer, SCO UnixWare 7.1.x

Sono disponibili dei driver per i linguaggi C, C++, C#, Eiffel, Java, Perl, PHP, Python, Ruby, Tcl e per le piattaforme Mono e. Net.

Infine, il linguaggio SQL di MySQL comprende numerose estensioni che sono tipiche di altri DBMS, quali PostgreSQL, Oracle e Sybase. In questo modo le query non standard scritte per altri DBMS in alcuni casi funzioneranno senza problemi.

Amministrazione 

Esistono diversi tipi di MySQL Manager, ovvero di strumenti per l'amministrazione di MySQL. Uno dei programmi più popolari per amministrare i database MySQL è phpMyAdmin che richiede un server web come Apache HTTP Server e il supporto del linguaggio PHP. Si può utilizzare facilmente tramite un qualsiasi browser.

Alcune offerte di terze parti sono HeidiSQL, SQLYog o Toad for MySQL. In alternativa la stessa MySQL AB offre programmi quali MySQL Administrator (amministrazione del database, degli utenti, operazioni pianificate, carico del server, ...) e MySQL Query Browser (esecuzione di svariati tipi di query), MySQL Migration Toolkit per importare da altri DBMS.

Per la progettazione e la modellazione di database MySQL esiste MySQL Workbench: integra il disegno, la modellazione, la creazione e l'aggiornamento di database in un unico ambiente di lavoro.

In passato veniva sviluppato anche MySQLcc (MySQL control center), sostituito da MySQL Query Browser.

In alternativa a gestori grafici è possibile utilizzare direttamente la riga di comando, preferita da utenti/amministratori esperti.

Tipi tabelle MYSQL (storage engine) 
In MySQL una tabella può essere di diversi tipi (o storage engine). Ogni tipo di tabella presenta proprietà e caratteristiche differenti (transazionale o meno, migliori prestazioni, diverse strategie di locking, funzioni particolari, ecc). Esiste poi un'API che si può utilizzare per creare in modo relativamente facile un nuovo tipo di tabella, che poi si può installare senza dover ricompilare o riavviare il server.

Storage engine ufficiali 
I tipi di tabella predefiniti sono:

 MyISAM
 InnoDB (transazionale, sviluppata da InnoBase Oy, società ora comprata da Oracle)
 Memory (una volta si chiamava Heap)
 Merge
 NDB, o ClusterDB (introdotta nella 5.0)
 CSV (introdotta nella 5.1)
 Federated (introdotta nella 5.0)
 Archive (introdotta nella 5.0)
 BLACKHOLE (introdotta nella 5.0)
 Falcon (non è mai stato terminato e il progetto è abbandonato)
 Aria (è stato sviluppato inizialmente per MySQL, che non l'ha mai adottato; è invece presente in MariaDB)

Storage engine prodotti da terze parti 
Esistono anche storage engine prodotti da terze parti. Eccone alcuni:

 XtraDB - Fork di InnoDB, sviluppato da Percona
 OQGRAPH - Simula strutture a grafo
 SolidDB - Motore transazionale
 RitmarkFS - Permette di accedere al filesystem in lettura e in scrittura tramite comandi SQL, supporta anche la replica del filesystem
 Distributed Data Engine - Motore per dati distribuiti, per gestire meglio il carico di lavoro
 SphinxSE - Interfaccia MySQL con Sphinx
 CassandraSE - Interfaccia MariaDB con Apache Cassandra
 mdbtools - Permette di leggere e scrivere un file. mdb (Access)
 BrightHouse - Appare all'utilizzatore come un normale MyISAM, ma struttura internamente i dati per colonne anziché per righe. Da utilizzare tipicamente in lettura per Data Warehouse: riduce da 10 a 100 volte i tempi di accesso e lo spazio per i dati.

Alcuni di questi storage engine sono distribuiti con MariaDB o Percona Server.

Storage engine obsoleti 
 ISAM (non più supportato; era il motore di default prima di essere sostituita da MyISAM)
 BDB (transazionale, sviluppata da SleepyCat, società ora acquisita da Oracle; dalla versione 5.1.12 non è più presente in MySQL)
 Gemini (non più supportato e non più compatibile con le API di MySQL da molti anni). Una volta era importantissimo in quanto motore transazionale; era prodotto dalla NuSphere, la quale non ha mai rispettato la licenza GPLv2 di MySQL e in tribunale ha tentato di negarne la validità giuridica, salvo poi accordarsi con MySQL per il pagamento dei danni economici e ritirare il prodotto dal mercato. Lo sviluppo e il supporto per Gemini sono cessati.
 PBXT - Motore transazionale progettato per applicazioni web ad alta concorrenza, distribuito con MariaDB.
 Amira è un fork di Gemini ed è stato mantenuto per un certo periodo dalla comunità.

Fork 
Alcuni fork sono nati in critica verso la poca apertura di MySQL ai contributi dei volontari esterni e la lentezza della pubblicazione dei fix dei bug segnalati.

Drizzle 

Nato da Brian Aker tra l'aprile e il maggio del 2008, questo fork si propone come un DBMS leggero. Infatti partendo da MySQL 6 alcuni sviluppatori hanno eliminato la maggior parte delle sue funzioni, mantenendo il cuore, ripulendolo e modificando la sua architettura. L'idea è quella di creare un microkernel con numerose interfacce che può utilizzare per caricare funzionalità esterne.

Durante il processo di pulizia il codice è arrivato a dimensioni inferiori ai 200 KB. Tra le funzionalità eliminate vi sono: stored procedure, viste, trigger, prepared statement, cache, MyISAM. Secondo gli sviluppatori tutte queste funzionalità potrebbero essere reimplementate sotto forma di plugin, senza appesantire inutilmente gli utenti che non le utilizzano: nonostante queste caratteristiche siano insostituibili in particolari situazioni, ognuna di esse è completamente inutile per la quasi totalità degli utenti di MySQL.

MariaDB 

Questo fork è stato creato da Monty Widenius nel 2009 dopo la sua fuoriuscita dalla Sun Microsystems, uscita dovuta sia a problemi con questa società e sia all'acquisizione della stessa da parte della concorrente Oracle. Quest'ultima motivazione ha portato molti dei principali sviluppatori di MySQL a seguire Widenius nel Monty Program, la nuova società da lui avviata per supportare il fork.

Il nome MariaDB è dovuto al fatto che inizialmente questo fork si focalizzava soprattutto sullo sviluppo dello storage engine Aria, il cui vecchio nome era Maria in dedica alla terza figlia di Widenius, una sorta di evoluzione di MyISAM.

Sono state incluse patch realizzate da terze parti, in particolare prelevate dai fork di MySQL sviluppati da Google, Facebook e Twitter, nonché storage engine sviluppati da terze parti. Inoltre altre migliorie al server e alcuni storage engine aggiuntivi sono stati sviluppate appositamente, alcune evoluzioni sviluppate per MySQL sono state importate nel fork e alcuni bug presenti nel programma originale sono stati corretti.

Percona Server 

Percona Server with XtraDB, o semplicemente Percona Server, è un fork sviluppato da Percona che contiene, oltre allo storage engine XtraDB (fork di InnoDB) diverse patch sviluppate principalmente dalla stessa società.

OurDelta 
Si trattava di una distribuzione sviluppata dalla società australiana Open Query. Il ramo 5.0 (prima versione del programma) si basava sul codice di MySQL 5.0, mentre i rami 5.1 e 5.2 si basavano su MariaDB 5.1 e 5.2. OurDelta applicava diverse patch sviluppate da terze parti e crea pacchetti per le distribuzioni GNU/Linux Debian, Ubuntu, Red Hat e CentOS.

Questo fork non è più mantenuto. Le ultime modifiche al codice, tuttora ospitato su Launchpad, risalgono al febbraio 2010.

Proven Scaling 
Proven Scaling aggiunge all'edizione enterprise di MySQL vari plugin che provengono dalla comunità del software libero.

Il fork nacque dalla constatazione che MySQL Community Edition era quasi defunto: secondo i contestatori, gli annunci ufficiali prospettavano solo due release annuali più qualche security fix, e dunque un utente avrebbe dovuto utilizzare MySQL Enterprise Edition, oppure rassegnarsi ad utilizzare prodotti superati.

Il repository contiene le versioni, anche datate, per tutti i sistemi operativi supportati da MySQL.

Diffusione 
Le piattaforme LAMP e WAMP incorporano MySQL per l'implementazione di server per gestire siti web dinamici, inoltre molti dei content management system di successo come WordPress, Joomla, Drupal e TikiWiki nascono proprio con il supporto predefinito a MySQL.

Il software MediaWiki nato nel 2002, che gestisce i siti del progetto Wikimedia, è basato su database MySQL. Wikimedia Foundation ha adottato MySQL fino al 2015 circa, migrando poi a MariaDB.

Note

Voci correlate 
 Database management system
 SQL
 Storage engine
 mSQL
 phpMyAdmin
 MySQL Manager
 MySQL Proxy
 MySQL Workbench
 MariaDB
 Cloud database

Altri progetti

Collegamenti esterni 
 
 
 MySQL, dal sito di Oracle
 Manuale di MySQL Administrator
 Manuale di MySQL Query Browser
  Manuale di MySQL Migration Toolkit
 
  MySQL Forge Wiki, il wiki ufficiale dedicato a MySQL (archiviato)
 Breve tutorial per phpMyAdmin, da HTML.it
 Guida MySQL in Italiano, da MRW.it