MySQL è uno dei più popolari database open source. È par­ti­co­lar­men­te ap­prez­za­to per quanto riguarda pre­sta­zio­ni, af­fi­da­bi­li­tà e sca­la­bi­li­tà ed è uti­liz­za­to in molti settori, dai piccoli sistemi di web hosting alle grandi ap­pli­ca­zio­ni aziendali. Qui ti guideremo durante ogni fase del processo di in­stal­la­zio­ne di MySQL su Ubuntu 20.04, così che tu riesca a con­fi­gu­ra­re un sistema di gestione di database af­fi­da­bi­le e sicuro.

Quali sono i requisiti di MySQL su Ubuntu 20.04?

Nell’insieme, i requisiti di sistema per in­stal­la­re MySQL su Ubuntu 20.04 sono re­la­ti­va­men­te limitati e do­vreb­be­ro poter essere sod­di­sfat­ti dalla maggior parte dei moderni sistemi desktop e server. Occorre tuttavia con­si­de­ra­re che i requisiti possono variare a seconda dell’uso che se ne intende fare e delle di­men­sio­ni del database. Se ad esempio hai in­ten­zio­ne di eseguire un’ap­pli­ca­zio­ne ad alta intensità che prevede l’uso di grandi database o di query complesse, saranno necessari requisiti di RAM e pro­ces­so­re più elevati, in grado di garantire pre­sta­zio­ni migliori. Un disco rigido capiente consente di sod­di­sfa­re le esigenze di una crescita futura e di ulteriori database.

Per garantire una co­mu­ni­ca­zio­ne fluida tra il server MySQL e i client, è opportuno con­trol­la­re at­ten­ta­men­te anche la con­fi­gu­ra­zio­ne della rete e le im­po­sta­zio­ni del firewall. Per evitare problemi di con­nes­sio­ne, il server MySQL dovrebbe avere un indirizzo IP statico.

MySQL ha i seguenti requisiti minimi di hardware e software:

  • Pro­ces­so­re (CPU): ar­chi­tet­tu­ra x86-64, min. 1 GHz (Dual-Core)
  • Memoria ad accesso casuale (RAM): min. 1 GB
  • Sistema operativo: Ubuntu 20.04, utente sudo con au­to­riz­za­zio­ni root
  • Firewall: porta 3306 MySQL aperta
  • Disco rigido: min. 500 MB
  • Con­nes­sio­ne internet: per scaricare i pacchetti e stabilire la con­nes­sio­ne al server MySQL
Server dedicati
Per­for­man­ce e in­no­va­zio­ne
  • Pro­ces­so­ri al­l'a­van­guar­dia di ultima ge­ne­ra­zio­ne
  • Hardware dedicato ad alte pre­sta­zio­ni
  • Data center cer­ti­fi­ca­ti ISO

Con­fi­gu­ra­re MySQL su Ubuntu 20.04: istru­zio­ni det­ta­glia­te

Per in­stal­la­re MySQL su Ubuntu 20.04 è possibile uti­liz­za­re il sistema di gestione dei pacchetti APT (Advanced Package Tool). Una volta terminata l’in­stal­la­zio­ne, sarà ne­ces­sa­rio impostare e con­fi­gu­ra­re MySQL prima di poterlo uti­liz­za­re pro­fi­cua­men­te. A tal proposito, occorre anche impostare la password di root e l’accesso per i client esterni. Nel nostro tutorial ti mo­stre­re­mo come procedere passo dopo passo.

Primo passaggio: ag­gior­na­re l’indice del pacchetto

Per prima cosa, sarebbe opportuno ag­gior­na­re l’elenco dei pacchetti. Per farlo, basta eseguire il seguente comando:

$ sudo apt update
bash

Secondo passaggio: in­stal­la­re il server MySQL

A questo punto, installa il pacchetto del server MySQL tramite APT:

$ sudo apt install mysql-server
bash

Il server può essere avviato ma­nual­men­te con il comando systemctl per ve­ri­fi­ca­re che sia davvero in funzione:

$ sudo systemctl start mysql.service
bash

Terzo passaggio: con­fi­gu­ra­re MySQL

Al termine dell’in­stal­la­zio­ne, MySQL non è ancora conforme agli standard di sicurezza rac­co­man­da­ti. Per ovviare a questo problema, MySQL offre uno script che modifica le im­po­sta­zio­ni per pro­teg­ge­re il server. Questo script si occupa, ad esempio, di impostare la password di root, rimuovere eventuali utenti anonimi e limitare l’accesso remoto.

Per eseguire cor­ret­ta­men­te lo script, tuttavia, è ne­ces­sa­rio prendere alcune pre­cau­zio­ni. Questo perché l’ap­pli­ca­zio­ne vorrà cambiare la password dell’account di root, che è di­sa­bi­li­ta­ta per im­po­sta­zio­ne pre­de­fi­ni­ta in Ubuntu. Per aggirare l’errore, occorre mo­di­fi­ca­re il metodo di au­ten­ti­ca­zio­ne dell’utente root.

Avvia il prompt di MySQL:

$ sudo mysql
bash

Con l’istru­zio­ne ALTER USER imposti una password per root:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
bash

Ora chiudi nuo­va­men­te il prompt di MySQL:

mysql> exit
bash

Esegui lo script di sicurezza:

$ sudo mysql_secure_installation
bash

Per au­ten­ti­car­ti come utente root, immetti quanto segue:

$ mysql -u root -p
bash

Terminato lo script, puoi cambiare di nuovo il metodo di au­ten­ti­ca­zio­ne pre­de­fi­ni­to:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
bash

In questo modo sarai in grado di con­net­ter­ti nuo­va­men­te mediante il comando sudo mysql.

Quarto passaggio: creazione dell’utente MySQL

Con l’in­stal­la­zio­ne di MySQL viene creata la figura dell’utente root, che ha tutti i privilegi per il server MySQL e il controllo completo su tutti i database, le tabelle e le utenze. Al fine di aumentare la sicurezza, è quindi opportuno creare l’utente con privilegi limitati.

Per farlo, apri il prompt di MySQL:

$ sudo mysql
bash

Se come metodo di au­ten­ti­ca­zio­ne è stata impostata una password, utilizza il seguente comando:

$ mysql -u root -p
bash

Ora crea una nuova utenza per MySQL:

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
bash

Al posto di “username” inserisci il tuo nome utente e al posto di “host” inserisci il nome del tuo host. Se stai eseguendo Ubuntu in locale, scrivi localhost. La dicitura “WITH au­then­ti­ca­tion_plugin” è fa­col­ta­ti­va. Il plugin “auth_socket” dispone di im­po­sta­zio­ni di sicurezza ab­ba­stan­za forti da non ri­chie­de­re una password per l’accesso.

In assenza di ulteriori spe­ci­fi­che, MySQL si avvale del plugin “caching_sha2_password” per l’au­ten­ti­ca­zio­ne. Alcune versioni di PHP, tuttavia, non sono com­pa­ti­bi­li con questo plugin. Puoi sempre ricorrere al vecchio ma col­lau­da­to plugin “mysql_native_password”:

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
bash

In al­ter­na­ti­va, è possibile uti­liz­za­re la funzione “ALTER” per utenti già esistenti:

mysql> ALTER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
bash

Quinto passaggio: assegnare i permessi

Adesso è ne­ces­sa­rio stabilire quali privilegi assegnare all’utente appena creato. La sintassi generale è la seguente:

mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';
bash

I privilegi multipli sono separati da una virgola. Per applicare i privilegi globali, so­sti­tui­sci “database.table” con un asterisco (“*”).

Nell’esempio seguente, diamo all’utente le au­to­riz­za­zio­ni per creare (CREATE), mo­di­fi­ca­re (ALTER), can­cel­la­re (DROP), inserire (INSERT), se­le­zio­na­re (SELECT), ag­gior­na­re (UPDATE) e rimuovere (DELETE) i dati di una tabella.

mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT on *.* TO 'user'@'host' WITH GRANT OPTION;
bash

Uti­liz­zan­do “WITH GRANT OPTION”, l’utente può anche concedere i propri permessi ad altri.

Svuota ora la cache con “FLUSH PRI­VI­LE­GES”:

mysql> FLUSH PRIVILEGES;
bash

A questo punto è possibile chiudere il prompt di MySQL:

mysql> exit
bash

Effettua il login con il nuovo nome utente:

$ mysql -u username -p
bash

Sesto passaggio: testare MySQL

Verifica che MySQL sia in ese­cu­zio­ne cor­ret­ta­men­te, ad esempio at­tra­ver­so il gestore di sistema Systemd:

$ systemctl status mysql.service
bash

In al­ter­na­ti­va, puoi ef­fet­tua­re la con­nes­sio­ne al database MySQL. Usa il seguente comando per accedere a MySQL e vi­sua­liz­za­re la versione del server:

$ sudo mysqladmin -p -u username version
bash
Vai al menu prin­ci­pa­le