Consigli utili per la risoluzione di errori comuni in MySQL


MySQL è un sistema di gestione di database relazionali open source ampiamente utilizzato ( RDMS ) di proprietà di Oracle . Negli anni è stata la scelta predefinita per le applicazioni basate sul Web e rimane comunque popolare rispetto agli altri motori di database.

MySQL è stato progettato e ottimizzato per le applicazioni Web - è parte integrante delle principali applicazioni Web come Facebook , Twitter , Wikipedia , YouTube e molti altri.

Il tuo sito o applicazione web è supportato da MySQL ? In questo articolo dettagliato, spiegheremo come risolvere i problemi e gli errori comuni nel server di database MySQL . Descriveremo come determinare le cause dei problemi e cosa fare per risolverli.

1. Impossibile connettersi al server MySQL locale

Uno dei comuni errori di connessione client-server in MySQL è " ERROR 2002 (HY000): Impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2) ”.

Questo errore indica che non è presente MySQL server (mysqld) in esecuzione sul sistema host o che è stato specificato un nome di file socket Unix errato o TCP/IP porta quando si tenta di connettersi al server.

Assicurarsi che il server sia in esecuzione controllando un processo denominato mysqld sull'host del server del database utilizzando il comando ps e il comando grep come mostrato.

$ ps xa | grep mysqld | grep -v mysqld

Se i comandi precedenti non mostrano output, il server di database non è in esecuzione. Pertanto il client non può connettersi ad esso. Per avviare il server, eseguire il seguente comando systemctl.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Per verificare lo stato del servizio MySQL , utilizzare il seguente comando.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Dall'output del comando precedente, il servizio MySQL non è riuscito. In tal caso, puoi provare a riavviarlo e controllarne lo stato ancora una volta.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Inoltre, se il server è in esecuzione come mostrato dal seguente comando, ma viene comunque visualizzato l'errore precedente, è necessario verificare anche che la porta TCP/IP sia bloccata da un firewall o da qualsiasi servizio di blocco delle porte .

$ ps xa | grep mysqld | grep -v mysqld

Per trovare la porta su cui il server è in ascolto, utilizzare il comando netstat come mostrato.

$ sudo netstat -tlpn | grep "mysql"

2. Impossibile connettersi a MySQL Server

Un altro errore di connessione comunemente riscontrato è " (2003) Impossibile connettersi al server MySQL su" server "(10061) ", il che significa che la connessione di rete è stata rifiutata.

Qui, inizia controllando che sul server sia presente un server MySQL come mostrato sopra. Assicurarsi inoltre che il server abbia connessioni di rete abilitate e che la porta di rete che si sta utilizzando per connettersi sia quella configurata sul server.

Altri errori comuni che potresti incontrare quando tenti di connetterti al server MySQL sono:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Questi errori indicano che il server potrebbe essere in esecuzione, tuttavia, si sta tentando di connettersi utilizzando una porta TCP/IP , named pipe o un file socket Unix diverso da quello su cui il server è in ascolto.

3. Accesso agli errori negati in MySQL

In MySQL , un account utente è definito in termini di nome utente e host o host client da cui l'utente può connettersi al server. Inoltre, un account può anche avere credenziali di autenticazione come una password.

Sebbene ci siano molte diverse cause di errori " Accesso negato ", una delle cause più comuni riguarda gli account MySQL che il server consente ai programmi client di utilizzare durante la connessione. Indica che nome utente specificato nella connessione non dispone dei privilegi per accedere al database.

MySQL consente la creazione di account che consentono agli utenti client di connettersi al server e accedere ai dati gestiti dal server. A questo proposito, se riscontri un errore di accesso negato , controlla se l'account utente è autorizzato a connettersi al server tramite il programma client che stai utilizzando, e probabilmente l'host da cui proviene la connessione da .

Puoi vedere quali privilegi ha un determinato account eseguendo il comando SHOW GRANTS come mostrato.

> SHOW GRANTS FOR 'tecmint'@'localhost';

È possibile concedere privilegi a un determinato utente su un database specifico all'indirizzo IP remoto utilizzando i seguenti comandi nella shell MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Inoltre, errori di accesso negati possono anche derivare da problemi con la connessione a MySQL, fare riferimento agli errori spiegati in precedenza.

4. Connessione persa a MySQL Server

Questo errore può verificarsi a causa di uno dei seguenti motivi: scarsa connettività di rete , timeout della connessione o un problema con valori BLOB maggiori di max_allowed_packet . In caso di problemi con la connessione di rete, assicurarsi di disporre di una buona connessione di rete, specialmente se si accede a un server di database remoto.

Se si tratta di un problema di timeout della connessione , in particolare quando MySQL sta tentando di utilizzare una connessione iniziale al server, aumentare il valore del parametro connect_timeout . Tuttavia, in caso di valori BLOB superiori a max_allowed_packet , devi impostare un valore superiore per max_allowed_packet nel tuo /etc /my.cnf file di configurazione nella sezione [mysqld] o [client] come mostrato.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Se il file di configurazione MySQL non è accessibile per te, puoi impostare questo valore utilizzando il seguente comando nella shell MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Troppe connessioni MySQL

Nel caso in cui un client MySQL riscontri l'errore " troppe connessioni ", significa che tutte le connessioni disponibili sono utilizzate da altri client. Il numero di connessioni (predefinito è 151 ) è controllato dalla variabile di sistema max_connections ; puoi rimediare al problema aumentando il suo valore per consentire più connessioni nel tuo file di configurazione /etc/my.cnf .

[mysqld]
max_connections=1000

6. Memoria esaurita MySQL

Se si esegue una query utilizzando il programma client MySQL e si verifica l'errore in questione, significa che MySQL non ha memoria sufficiente per archiviare l'intero risultato della query.

Il primo passo è assicurarsi che la query sia corretta, se lo è, quindi effettuare le seguenti operazioni:

  • if you are using MySQL client directly, start it with --quick switch, to disable cached results or
  • if you are using the MyODBC driver, the configuration user interface (UI) has an advanced tab for flags. Check “Do not cache result“.

Un altro ottimo strumento è MySQL Tuner - uno script utile che si connetterà a un server MySQL in esecuzione e offre suggerimenti su come può essere configurato per prestazioni più elevate.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

Per l'ottimizzazione di MySQL e i suggerimenti per l'ottimizzazione delle prestazioni, leggi il nostro articolo: 15 Suggerimenti utili per ottimizzare e ottimizzare le prestazioni di MySQL/MariaDB.

7. MySQL continua a bloccarsi

Se incontri questo problema, dovresti provare a scoprire se il problema è che il server MySQL muore o se il client ha un problema. Si noti che molti arresti anomali del server sono causati da file di dati danneggiati o file di indice.

È possibile controllare lo stato del server per stabilire per quanto tempo è stato installato e funzionante.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

In alternativa, eseguire il seguente comando mysqladmin per trovare uptime del server MySQL.

$ sudo mysqladmin version -p 

Altre soluzioni includono, a titolo esemplificativo, l'arresto del server MySQL e l'abilitazione del debug, quindi riavviare il servizio. Puoi provare a creare un test che può essere utilizzato per ripetere il problema. Inoltre, aprire una finestra di terminale aggiuntiva ed eseguire il comando seguente per visualizzare le statistiche di processo MySQL mentre si eseguono altre query:

$ sudo mysqladmin -i 5 status
OR
$ sudo mysqladmin -i 5 -r status 

Sebbene abbiamo esaminato alcuni problemi ed errori MySQL comuni e abbiamo anche fornito i modi per risolverli e risolverli, la cosa più importante con la diagnosi di un errore è capire cosa significa (in termini di cosa lo sta causando) .

Quindi come si può determinare questo? I seguenti punti ti guideranno su come accertare che cosa sta causando esattamente un problema:

  1. The first and most important step is to look into the MySQL logs which are stored in the directory /var/log/mysql/. You can use command line utilities such as tail to read through the log files.
  2. If MySQL service fails to start, check its status using systemctl or use the journetctl (with the -xe flag) command under systemd to examine the problem.
  3. You can also examine system log file such as /var/log/messages or similar for reasons for your problem.
  4. Try using tools such as Mytop, glances, top, ps, or htop to check which program is taking all CPU or is locking the machine or to inspect whether you are running out of memory, disk space, file descriptors, or some other important resource.
  5. Assuming that problem is some runaway process, you can always try to kill it (using the pkill or kill utility) so that MySQL works normally.
  6. Supposing that the mysqld server is causing problems, you can run the command: mysqladmin -u root ping or mysqladmin -u root processlist to get any response from it.
  7. If the problem is with your client program while trying to connect to the MySQL server, check why it is not working fine, try to get any output from it for troubleshooting purposes.

Ti piacerebbe anche leggere questi articoli relativi a MySQL:

  1. Learn MySQL / MariaDB for Beginners – Part 1
  2. How to Monitor MySQL/MariaDB Databases using Netdata on CentOS 7
  3. How to Transfer All MySQL Databases From Old to New Server
  4. Mytop – A Useful Tool for Monitoring MySQL/MariaDB Performance in Linux
  5. 12 MySQL/MariaDB Security Best Practices for Linux

Per ulteriori informazioni, consultare il manuale di riferimento MySQL relativo a problemi ed errori comuni, elenca in modo completo i problemi comuni e i messaggi di errore che si possono verificare durante l'utilizzo di MySQL, compresi quelli che abbiamo discusso sopra e altro ancora.