Installare MySQL/MariaDB

Alessio, Héctor Louzao, Ankur Sinha Version F37 Last review: 2022-06-10
MySQL è un popolare RDBMS (Relational Database Management System). MariaDB è nato come fork di MySQL. Oggi i due prodotti sono leggermente diversi. La migrazione dei dati da un sistema all’altro non è un compito banale.

MariaDB ha una licenza GPLv2, mentre MySQL ha due opzioni di licenza, GPLv2 (per l’edizione Community) ed Enterprise.

Nei Repository di Fedora puoi trovare:

  • MariaDB 10.3 (come pacchetto normale o come modulo)

  • MariaDB 10.4 (come modulo)

  • MySQL 8.0 community edition (come pacchetto normale o come modulo)

I pacchetti MariaDB e MySQL sono in conflitto perché forniscono file simili. Pertanto, è possibile installare solo uno dei due, MariaDB o MySQL, ma non entrambi.

Inoltre, è possibile installare MySQL commmunity edition (8.0 o 5.7) dal repository gestito da Oracle/MySQL.

Installazione da Oracle MySQL

This page discusses third-party software sources not officially affiliated with or endorsed by the Fedora Project. Use them at your own discretion. Fedora recommends the use of free and open source software and avoidance of software encumbered by patents.

Aggiunta del repository MySQL a Fedora

Scarica il pacchetto di rilascio fornito da Oracle da: https://dev.mysql.com/downloads/repo/yum/ Una volta scaricato, installalo usando dnf:

sudo dnf install <percorso del file rpm scaricato>

Nota che questo repository è fornito da Oracle, quindi eventuali problemi o bug devono essere segnalati attraverso i loro canali di comunicazione: https://www.mysql.com/about/faq/

Installazione di MySQL su Fedora

sudo dnf install mysql-server

Avvio del servizio MySQL e abilitazione all’accesso:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Trova la password predefinita. Per motivi di sicurezza, MySQL genera una chiave root temporanea. Nota che MySQL ha politiche di sicurezza più rigide rispetto a MariaDB.

sudo grep 'password temporanea' /var/log/mysqld.log

Configurazione di MySQL prima del primo utilizzo

sudo mysql_secure_installation

Quindi, rispondi alle domande di sicurezza come preferisci, oppure rispondi a tutte.

Utilizzo di MySQL

sudo mysql -u root -p

Rimozione di MySQL

Consiglio di rimuovere nel seguente modo, il metodo più appropriato e sicuro senza eliminare molte dipendenze è:

sudo rpm -e --nodeps mysql-community-libs mysql-community-common mysql-community-server

Installazione dal repository principale di Fedora

La comunità fornisce un pacchetto MySQL nel repository principale.

sudo dnf install {community-mysql-server|mariadb-server}

Configurazione di MySQL/MariaDB

Abilita il servizio all’avvio e avvialo:

sudo systemctl enable {mysqld|mariadb}
sudo systemctl start  {mysqld|mariadb}

Configurazione di SQL prima del primo utilizzo

sudo mysql_secure_installation

Verranno poste alcune domande: rispondi come preferisci; rispondere a tutte è perfettamente accettabile.

Utilizzo di SQL

sudo mysql -u root -p

Rimozione di SQL

Consiglio di rimuovere nel seguente modo:

sudo dnf remove {community-mysql-server|mariadb-server}

Installazione tramite Podman

Download di un’immagine Docker per il server SQL

podman pull {mysql/mysql-server|mariadb/server}

Visualizzazione dei log

podman logs {mysql|mariadb}

Avvio di un’istanza del server MySQL

I comandi qui sotto contengono la password casuale generata per l’utente root:

podman logs mysql 2>&1 | grep GENERATA
podman run -d --name=mysql -e MYSQL_ROOT_PASSWORD=mia_password mysql/mysql-server

Avvio di un’istanza del server MariaDB

podman run -d --name=mariadb -e MYSQL_ROOT_PASSWORD=mia_password mariadb/server
Password predefinita vuota per MariaDB
L’opzione -d utilizzata per ENTRAMBI nel comando podman run sopra fa sì che il contenitore venga eseguito in background. Usa questo comando per monitorare l’output dal contenitore:

Connessione al server MySQL dall’interno del contenitore

podman exec -it mysql mysql -uroot -p

devi reimpostare la password root del server eseguendo questa istruzione:

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

Connessione al server MariaDB dall’interno del contenitore

podman exec -it mariadb bash

Reimpostazione di SQL_ROOT_PASSWORD

devi reimpostare la password root del server eseguendo questa istruzione:

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

Arresto ed eliminazione di un contenitore SQL

podman {start|stop|restart} {mysql|mariadb}

Eliminazione di un contenitore SQL

podman rm {mysql|mariadb}
puoi fare lo stesso con docker, basta sostituire podman con docker.

Utilizzo del RDBMS

Connettiti alla shell di MySQL/MariaDB usando il comando mysql.

Per entrambi, il comando è mysql. La sintassi e le opzioni sono generalmente le stesse.

$ mysql -u root -p

Una volta ottenuto l’accesso alla shell, puoi verificare la versione del software in esecuzione:

mysql> SELECT version();

Puoi creare un database:

mysql> create schema test;

Creazione di un utente:

mysql> GRANT ALL PRIVILEGES ON test.* TO 'mio_utente'@'localhost' IDENTIFIED BY 'PaSsWoRd';

Elenca i database disponibili:

mysql> show schemas;

Posizione dei file

Lo spazio di archiviazione su disco del database si trova in /var/lib/mysql.

Come consentire l’accesso remoto a MySQL/MariaDB/MySQL Community

Aggiunta di una nuova regola a Firewalld

Apri la porta SQL (3306) su Firewalld:

sudo firewall-cmd --permanent --zone=public --add-service=mysql

Oppure

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp

Riavvio del servizio firewalld

systemctl restart firewalld.service

Modifica dei file di configurazione:

File di configurazione:

  • MySQL → /etc/my.cnf/

  • MySQL Community → /etc/my.cnf.d/community-mysql-server.cnf

  • MariaDB → /etc/my.cnf

puoi verificarlo con il seguente comando rpm -qc [pacchetto].

Vai alla riga che inizia con la direttiva bind-address. Sarà simile a questa: puoi impostare questa direttiva a un indirizzo IP jolly, come *, ::, o 0.0.0.0:

bind-address            = 0.0.0.0

Dopo aver modificato questa riga, salva e chiudi il file, quindi riavvia il servizio MySQL:

sudo systemctl restart {mysqld|mariadb}

Creazione di un utente

CREATE USER 'tuo_nome_utente'@'indirizzo_ip_host' IDENTIFIED BY 'tua_password';
Sostituisci tuo_nome_utente e tua_password con il nome utente e la password desiderati. Qui, indirizzo_ip_host è il nome host o l’indirizzo IP del computer da cui vuoi connetterti al server MySQL/MariaDB. Puoi anche usare % come indirizzo_ip_host se vuoi connetterti da qualsiasi computer. Può anche essere qualcosa come 192.168.2.% se vuoi connetterti da computer nell’intervallo IP 192.168.2.1 – 192.168.2.254.

Consentire l’accesso

GRANT ALL PRIVILEGES ON *.* TO 'tuo_nome_utente'@'%';
  IDENTIFIED BY 'mia-nuova-password' WITH GRANT OPTION;

Oppure

È comune che le persone vogliano creare un utente "root" che possa connettersi da qualsiasi luogo, quindi, come esempio, faremo proprio questo, ma per migliorarlo creeremo un utente root che possa connettersi da qualsiasi punto della rete locale (LAN).

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%'
  IDENTIFIED BY 'mia-nuova-password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Connessione

mysql -u [UTENTE] -h [IP] -p

Come risolvere problemi in SQL

Versione:

dnf list installed | grep -i -e maria -e mysql -e galera

Verifica dei parametri nel file di configurazione:

  • MySQL:

mysqld --print-defaults
  • MariaDB/MySQL Community:

/usr/libexec/mysqld --print-defaults
La compatibilità tra versioni diverse non è consentita. Installane solo una.

Come accedere ai log degli errori SQL

Spesso, la causa principale di rallentamenti, arresti anomali o comportamenti imprevisti in SQL può essere trovata nei log degli errori. In molti casi, i log degli errori sono più facilmente leggibili con il programma less, un’utilità da riga di comando.

se SQL non si comporta come previsto, puoi ottenere ulteriori informazioni sulla fonte del problema

  • systemctl status mysqld.service non si avvia correttamente, queste informazioni non spiegano bene cosa sta succedendo? Dopo questo comando, dovresti digitare journalctl -xe -u mariadb -u mysqld.

  • Controlla i file di log, che si trovano in /var/log/mysql/mysqld.log per MySQL e in /var/log/mariadb per MariaDB.

Come risolvere gli errori di socket in SQL

SQL gestisce le connessioni al server del database tramite un file di socket, un tipo speciale di file che facilita la comunicazione tra diversi processi. Il file di socket del server MySQL si chiama mysqld.sock e sui sistemi Ubuntu è solitamente memorizzato nella directory /var/run/mysqld/. Questo file viene creato automaticamente dal servizio MySQL.

A volte, modifiche al sistema o alla configurazione di SQL possono impedire a SQL di leggere il file di socket, bloccando l’accesso ai database. L’errore di socket più comune appare così:

ERRORE 2002 (HY000): Impossibile connettersi al server MySQL locale tramite il socket '/var/run/mysqld/mysqld.sock' (2)

Ci sono diverse ragioni per cui si può verificare questo errore e alcuni modi potenziali per risolverlo. Una causa comune di questo errore è che il servizio SQL è fermo o non è mai stato avviato, il che significa che non è stato in grado di creare il file di socket in primo luogo. Per scoprire se questa è la ragione dell’errore, prova ad avviare il servizio con systemctl:

sudo systemctl start {mysqld|mariadb}

Quindi prova ad accedere nuovamente al prompt di MySQL. Se ricevi ancora l’errore di socket, verifica nuovamente la posizione in cui l’installazione di MySQL cerca il file di socket. Queste informazioni si trovano nel file mysqld.cnf:

cerca il parametro socket nella sezione [mysqld] di questo file. Sarà simile a questo:

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

Chiudi questo file, quindi verifica che il file mysqld.sock esista eseguendo un comando ls sulla directory in cui SQL si aspetta di trovarlo:

ls -a /var/run/mysqld/

Se il file di socket esiste, lo vedrai nell’output di questo comando:

mysqld.pid  mysqld.sock  mysqld.sock.lock

se il file non esiste, la ragione potrebbe essere che MySQL sta cercando di crearlo, ma non ha i permessi adeguati per farlo. Puoi assicurarti che i permessi corretti siano in atto cambiando la proprietà della directory all’utente e al gruppo mysql:

sudo chown mysql:mysql /var/run/mysqld/

Quindi assicurati che l’utente mysql abbia i permessi appropriati sulla directory. Impostare questi a 775 funziona nella maggior parte dei casi:

sudo chmod -R 755 /var/run/mysqld/

Infine, riavvia il servizio MySQL in modo che possa provare a creare nuovamente il file di socket:

sudo systemctl restart {mysqld|mariadb}

Quindi prova ad accedere nuovamente al prompt di MySQL. Se incontri ancora l’errore di socket, è probabile che ci sia un problema più profondo con la tua istanza di MySQL, nel qual caso dovresti controllare il log degli errori per vedere se fornisce qualche indizio.