Mysql
 sql >> Database >  >> RDS >> Mysql

Suggerimenti utili per risolvere gli 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 ancora popolare rispetto ad altri motori di database.

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

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

1. Impossibile connettersi al server MySQL locale

Uno degli errori di connessione client-server comuni 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 hai specificato un nome file socket Unix errato o TCP/IP porta quando si tenta di connettersi al server.

Assicurati che il server sia in esecuzione controllando un processo chiamato mysqld sull'host del server di database utilizzando il comando ps e il comando grep insieme come mostrato.

$ ps xa | grep mysqld | grep -v mysqld

Se i comandi precedenti non mostrano alcun 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 MySQL stato del servizio, utilizzare il comando seguente.

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

Dall'output del comando precedente, MySQL servizio è fallito. 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 comando seguente, ma vedi ancora l'errore sopra riportato, dovresti anche verificare che il TCP/IP la porta è 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 è in ascolto il server, usa 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 sia presente un MySQL server in esecuzione sul sistema come mostrato sopra. Assicurati inoltre che il server abbia le connessioni di rete abilitate e che la porta di rete che stai utilizzando per la connessione 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 stai tentando di connetterti utilizzando un TCP/IP port, named pipe o file socket Unix diverso da quello su cui è in ascolto il server.

3. Accesso agli errori negati in MySQL

In MySQL , un account utente è definito in termini di nome utente e l'host o gli 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 "Accesso negato ” errori, una delle cause più comuni è relativa agli account MySQL che il server consente ai programmi client di utilizzare durante la connessione. Indica quel 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 ed eventualmente l'host da cui proviene la connessione.

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

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

Puoi concedere privilegi a un particolare 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, accesso negato errori può anche derivare da problemi con la connessione a MySQL, fare riferimento agli errori spiegati in precedenza.

4. Connessione persa al server MySQL

Potresti riscontrare questo errore a causa di uno dei seguenti motivi:connettività di rete scarsa , timeout connessione o un problema con BLOB valori maggiori di max_allowed_packet . In caso di problemi di connessione di rete, assicurati di disporre di una buona connessione di rete, soprattutto se stai accedendo a un server di database remoto.

Se si tratta di un timeout di connessione problema, in particolare quando MySQL sta tentando di utilizzare una connessione iniziale al server, aumentare il valore di connect_timeout parametro. Ma in caso di valori BLOB che sono più grandi di max_allowed_packet , devi impostare un valore più alto per il max_allowed_packet nel tuo /etc/my.cnf file di configurazione in [mysqld] o [client] sezione come mostrato.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

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

5. Troppe connessioni MySQL

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

[mysqld]
max_connections=1000

6. Memoria insufficiente per MySQL

Nel caso in cui esegui una query utilizzando MySQL programma client e riscontra l'errore in questione, significa che MySQL non ha memoria sufficiente per memorizzare l'intero risultato della query.

Il primo passo è assicurarsi che la query sia corretta, se lo è, quindi procedere come segue:

  • se stai utilizzando direttamente il client MySQL, avvialo con --quick switch , per disabilitare i risultati memorizzati nella cache o
  • se stai utilizzando MyODBC driver, l'interfaccia utente di configurazione (UI) ha una scheda avanzata per i flag. Seleziona "Non memorizzare nella cache i risultati “.

Un altro ottimo strumento è MySQL Tuner – uno script utile che si collegherà a un server MySQL in esecuzione e fornisce suggerimenti su come configurarlo per prestazioni più elevate.

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

Per suggerimenti sull'ottimizzazione e sull'ottimizzazione delle prestazioni di MySQL, leggi il nostro articolo:15 utili suggerimenti sull'ottimizzazione e l'ottimizzazione delle prestazioni di MySQL/MariaDB.

7. MySQL continua a bloccarsi

Se riscontri questo problema, dovresti provare a scoprire se il problema è che il MySQL il server muore o se è il client con un problema. Tieni presente che molti arresti anomali del server sono causati da file di dati o file di indice danneggiati.

Puoi controllare lo stato del server per stabilire da quanto tempo è attivo e funzionante.

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

In alternativa, esegui il seguente comando mysqladmin per trovare il tempo di attività del server MySQL.

$ sudo mysqladmin version -p 

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

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

In conclusione:determinare cosa causa un problema o un errore

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

Quindi come puoi determinarlo? I seguenti punti ti guideranno su come accertare cosa sta causando esattamente un problema:

  1. Il primo e più importante passo è esaminare i log di MySQL che sono archiviati nella directory /var/log/mysql/ . Puoi utilizzare le utilità della riga di comando come tail per leggere i file di registro.
  2. Se il servizio MySQL non si avvia, controlla il suo stato utilizzando systemctl o utilizza journetctl (con il -xe flag) sotto systemd per esaminare il problema.
  3. Puoi anche esaminare file di registro di sistema come /var/log/messages o simili per i motivi del tuo problema.
  4. Prova a utilizzare strumenti come Mytop, sguardi, top, ps o htop per verificare quale programma sta occupando tutta la CPU o sta bloccando la macchina o per controllare se stai esaurendo la memoria, lo spazio su disco, i descrittori di file o alcuni altra risorsa importante.
  5. Supponendo che il problema sia un processo in fuga, puoi sempre provare a eliminarlo (usando l'utilità pkill o kill) in modo che MySQL funzioni normalmente.
  6. Supponendo che mysqld server sta causando problemi, puoi eseguire il comando:mysqladmin -u root ping o mysqladmin -u root processlist per ottenere una risposta da esso.
  7. Se il problema riguarda il tuo programma client durante il tentativo di connessione al server MySQL, controlla perché non funziona correttamente, prova a ottenere qualsiasi output da esso per la risoluzione dei problemi.

Potresti anche leggere questi seguenti articoli relativi a MySQL:

  1. Impara MySQL/MariaDB per principianti – Parte 1
  2. Come monitorare i database MySQL/MariaDB utilizzando Netdata su CentOS 7
  3. Come trasferire tutti i database MySQL dal vecchio al nuovo server
  4. Mytop:uno strumento utile per monitorare le prestazioni di MySQL/MariaDB in Linux
  5. 12 Best practice per la sicurezza MySQL/MariaDB per Linux

Per ulteriori informazioni, consulta il manuale di riferimento MySQL relativo ai problemi e agli errori comuni, che elenca in modo completo i problemi comuni e i messaggi di errore che potresti incontrare durante l'utilizzo di MySQL, inclusi quelli di cui abbiamo discusso sopra e altro ancora.