Ricerca nel sito web

Come installare MySQL su Ubuntu 18.04


Una versione precedente di questo tutorial è stata scritta da Hazel Virdó

introduzione

Stack LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Utilizza un database relazionale e SQL (Structured Query Language) per gestire i propri dati.

La versione breve dell'installazione è semplice: aggiorna l'indice del tuo pacchetto, installa il pacchetto mysql-server, quindi esegui lo script di sicurezza incluso.

  1. sudo apt update
  2. sudo apt install mysql-server
  3. sudo mysql_secure_installation

Questo tutorial spiegherà come installare MySQL versione 5.7 su un server Ubuntu 18.04. Tuttavia, se stai cercando di aggiornare un'installazione MySQL esistente alla versione 5.7, puoi invece leggere questa guida all'aggiornamento di MySQL 5.7.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di:

  • Un server Ubuntu 18.04 configurato seguendo questa guida alla configurazione iniziale del server, incluso un utente non root con privilegi sudo e un firewall.

Passaggio 1: installazione di MySQL

Su Ubuntu 18.04, solo l'ultima versione di MySQL è inclusa nel repository dei pacchetti APT per impostazione predefinita. Al momento della scrittura, questo è MySQL 5.7

Per installarlo, aggiorna l'indice del pacchetto sul tuo server con apt:

  1. sudo apt update

Quindi installa il pacchetto predefinito:

  1. sudo apt install mysql-server

Assicurati che il server sia in esecuzione utilizzando il comando systemctl start:

  1. sudo systemctl start mysql.service

Questi comandi installeranno e avvieranno MySQL, ma non ti chiederanno di impostare una password o apportare altre modifiche alla configurazione. Poiché ciò rende insicura l'installazione di MySQL, ci occuperemo di questo in seguito.

Passaggio 2: configurazione di MySQL

Per nuove installazioni, ti consigliamo di eseguire lo script di sicurezza incluso. Ciò modifica alcune delle opzioni predefinite meno sicure per cose come accessi root remoti e utenti di esempio. Nelle versioni precedenti di MySQL era necessario inizializzare manualmente anche la directory dei dati, ma ora questo viene fatto automaticamente.

Esegui lo script di sicurezza:

  1. sudo mysql_secure_installation

Questo ti guiderà attraverso una serie di prompt in cui puoi apportare alcune modifiche alle opzioni di sicurezza dell'installazione di MySQL. Il primo messaggio ti chiederà se desideri configurare il plug-in Validate Password, che può essere utilizzato per testare la sicurezza della tua password MySQL. Indipendentemente dalla tua scelta, il prossimo prompt sarà impostare una password per l'utente root di MySQL. Inserisci e poi conferma una password sicura di tua scelta.

Da lì, puoi premere Y e poi INVIO per accettare i valori predefiniti per tutte le domande successive. Ciò rimuoverà alcuni utenti anonimi e il database di test, disabiliterà gli accessi root remoti e caricherà queste nuove regole in modo che MySQL rispetti immediatamente le modifiche apportate.

Per inizializzare la directory dei dati MySQL, dovresti usare mysql_install_db per le versioni precedenti alla 5.7.6, e mysqld --initialize per la 5.7.6 e successive. Tuttavia, se hai installato MySQL dalla distribuzione Debian, come descritto nel passaggio 1, la directory dei dati è stata inizializzata automaticamente; non devi fare niente. Se provi comunque a eseguire il comando, vedrai il seguente errore:

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

Nota che anche se hai impostato una password per l'utente MySQL root, questo utente non è configurato per l'autenticazione con una password durante la connessione alla shell MySQL. Se lo desideri, puoi modificare questa impostazione seguendo il passaggio 3.

Passaggio 3: (facoltativo) Regolazione dell'autenticazione e dei privilegi dell'utente

Nei sistemi Ubuntu che eseguono MySQL 5.7 (e versioni successive), l'utente root MySQL è impostato per autenticarsi utilizzando il plug-in auth_socket per impostazione predefinita anziché con una password. Ciò consente una maggiore sicurezza e usabilità in molti casi, ma può anche complicare le cose quando è necessario consentire a un programma esterno (ad es. phpMyAdmin) di accedere all'utente.

Per usare una password per connettersi a MySQL come root, dovrai cambiare il suo metodo di autenticazione da auth_socket a mysql_native_password. Per fare ciò, apri il prompt di MySQL dal tuo terminale:

  1. sudo mysql

Successivamente, controlla quale metodo di autenticazione utilizza ciascuno dei tuoi account utente MySQL con il seguente comando:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

In questo esempio, puoi vedere che l'utente root si autentica utilizzando il plugin auth_socket. Per configurare l'account root per l'autenticazione con una password, esegui il seguente comando ALTER USER. Assicurati di cambiare password con una password complessa di tua scelta e nota che questo comando cambierà la password di root che hai impostato nel passaggio 2:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Quindi, esegui FLUSH PRIVILEGES che dice al server di ricaricare le tabelle di concessione e rendere effettive le tue nuove modifiche:

  1. FLUSH PRIVILEGES;

Controlla nuovamente i metodi di autenticazione utilizzati da ciascuno dei tuoi utenti per confermare che root non esegua più l'autenticazione utilizzando il plug-in auth_socket:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

Puoi vedere in questo output di esempio che l'utente MySQL root ora si autentica utilizzando una password. Dopo averlo confermato sul tuo server, puoi uscire dalla shell MySQL:

  1. exit

In alternativa, alcuni potrebbero ritenere che sia più adatto al loro flusso di lavoro connettersi a MySQL con un utente dedicato. Per creare un tale utente, apri di nuovo la shell MySQL:

  1. sudo mysql

Nota: se hai abilitato l'autenticazione tramite password per root, come descritto nei paragrafi precedenti, dovrai utilizzare un comando diverso per accedere alla shell MySQL. Quanto segue eseguirà il tuo client MySQL con normali privilegi utente e otterrai privilegi di amministratore all'interno del database solo tramite l'autenticazione:

  1. mysql -u root -p

Da lì, crea un nuovo utente e assegnagli una password complessa:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Quindi, concedi al tuo nuovo utente i privilegi appropriati. Ad esempio, puoi concedere all'utente i privilegi a tutte le tabelle all'interno del database, nonché il potere di aggiungere, modificare e rimuovere i privilegi dell'utente, con questo comando:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Si noti che, a questo punto, non è necessario eseguire nuovamente il comando FLUSH PRIVILEGES. Questo comando è necessario solo quando modifichi le tabelle di concessione utilizzando istruzioni come INSERT, UPDATE o DELETE. Poiché hai creato un nuovo utente, invece di modificarne uno esistente, FLUSH PRIVILEGES non è necessario qui.

Successivamente, esci dalla shell MySQL:

  1. exit

Infine, testiamo l'installazione di MySQL.

Passaggio 4: test di MySQL

Indipendentemente da come lo hai installato, MySQL avrebbe dovuto iniziare a funzionare automaticamente. Per verificarlo, controlla il suo stato.

  1. systemctl status mysql.service

Vedrai un output simile al seguente:

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 Main PID: 3754 (mysqld)
    Tasks: 28
   Memory: 142.3M
      CPU: 1.994s
   CGroup: /system.slice/mysql.service
           └─3754 /usr/sbin/mysqld

Se MySQL non è in esecuzione, puoi avviarlo con sudo systemctl start mysql.

Per un ulteriore controllo, puoi provare a connetterti al database utilizzando lo strumento mysqladmin, che è un client che ti consente di eseguire comandi amministrativi. Ad esempio, questo comando dice di connettersi a MySQL come root (-u root), richiedere una password (-p) e restituire la versione.

  1. sudo mysqladmin -p -u root version

Dovresti vedere un output simile a questo:

mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version		5.7.21-1ubuntu1
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

Ciò significa che MySQL è attivo e funzionante.

Conclusione

Ora hai una configurazione MySQL di base installata sul tuo server. Ecco alcuni esempi dei passaggi successivi che puoi eseguire:

  • Implementa alcune misure di sicurezza aggiuntive
  • Riposiziona la directory dei dati
  • Gestisci i tuoi server MySQL con SaltStack