sql >> Database >  >> RDS >> Mysql

Handige tips om veelvoorkomende fouten in MySQL op te lossen

MySQL is een veelgebruikt open source relationeel databasebeheersysteem (RDMS ) eigendom van Oracle . Het is door de jaren heen de standaardkeuze geweest voor webgebaseerde applicaties en is nog steeds populair in vergelijking met andere database-engines.

MySQL is ontworpen en geoptimaliseerd voor webapplicaties - het vormt een integraal onderdeel van grote webgebaseerde applicaties zoals Facebook , Twitter , Wikipedia , YouTube , en vele anderen.

Wordt uw site of webtoepassing mogelijk gemaakt door MySQL ? In dit gedetailleerde artikel leggen we uit hoe u problemen en veelvoorkomende fouten in MySQL . kunt oplossen database server. We zullen beschrijven hoe we de oorzaken van de problemen kunnen achterhalen en wat we moeten doen om ze op te lossen.

1. Kan geen verbinding maken met lokale MySQL-server

Een van de meest voorkomende verbindingsfouten van client naar server in MySQL is "ERROR 2002 (HY000):Kan geen verbinding maken met lokale MySQL-server via socket '/var/run/mysqld/mysqld.sock' (2) ”.

Deze fout geeft aan dat er geen MySQL . is server (mysqld) draait op het hostsysteem of dat u een verkeerde Unix-socketbestandsnaam of TCP/IP hebt opgegeven poort wanneer u verbinding probeert te maken met de server.

Zorg ervoor dat de server draait door een proces met de naam mysqld . aan te vinken op uw databaseserverhost met behulp van de ps-opdracht en grep-opdracht samen, zoals weergegeven.

$ ps xa | grep mysqld | grep -v mysqld

Als de bovenstaande opdrachten geen uitvoer weergeven, is de databaseserver niet actief. Daarom kan de client er geen verbinding mee maken. Voer de volgende systemctl-opdracht uit om de server te starten.

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

De MySQL verifiëren servicestatus, gebruik dan de volgende opdracht.

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

Uit de uitvoer van de bovenstaande opdracht, de MySQL dienst is mislukt. In zo'n geval kunt u proberen het opnieuw op te starten en de status nogmaals te controleren.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Bovendien, als de server werkt zoals weergegeven door de volgende opdracht, maar u nog steeds de bovenstaande fout ziet, moet u ook controleren of de TCP/IP poort wordt geblokkeerd door een firewall of een poortblokkeringsservice.

$ ps xa | grep mysqld | grep -v mysqld

Gebruik het netstat-commando zoals weergegeven om de poort te vinden waarop de server luistert.

$ sudo netstat -tlpn | grep "mysql"

2. Kan geen verbinding maken met MySQL-server

Een andere veel voorkomende verbindingsfout is "(2003) Kan geen verbinding maken met MySQL-server op 'server' (10061) ”, wat betekent dat de netwerkverbinding is geweigerd.

Begin hier met te controleren of er een MySQL . is server die op het systeem draait, zoals hierboven weergegeven. Zorg er ook voor dat de server netwerkverbindingen heeft ingeschakeld en dat de netwerkpoort die u gebruikt om verbinding te maken de poort is die op de server is geconfigureerd.

Andere veelvoorkomende fouten die u waarschijnlijk tegenkomt wanneer u verbinding probeert te maken met de MySQL-server zijn:

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)

Deze fouten geven aan dat de server mogelijk actief is, maar u probeert verbinding te maken via een TCP/IP poort, named pipe of Unix-socketbestand verschilt van het bestand waarop de server luistert.

3. Toegang geweigerde fouten in MySQL

In MySQL , een gebruikersaccount wordt gedefinieerd in termen van een gebruikersnaam en de clienthost of -hosts van waaruit de gebruiker verbinding kan maken met de server. Daarnaast kan een account ook authenticatiegegevens hebben, zoals een wachtwoord.

Hoewel er veel verschillende oorzaken zijn van "Toegang geweigerd ”-fouten, is een van de meest voorkomende oorzaken gerelateerd aan de MySQL-accounts die de server clientprogramma's toestaat om te gebruiken bij het verbinden. Het geeft aan dat gebruikersnaam opgegeven in de verbinding heeft geen toegangsrechten tot de database.

Met MySQL kunnen accounts worden aangemaakt waarmee clientgebruikers verbinding kunnen maken met de server en toegang kunnen krijgen tot gegevens die door de server worden beheerd. In dit opzicht, als u een fout toegang geweigerd . tegenkomt , controleer of het gebruikersaccount verbinding mag maken met de server via het clientprogramma dat u gebruikt, en mogelijk de host waarvan de verbinding afkomstig is.

U kunt zien welke privileges een bepaald account heeft door de SHOW GRANTS . uit te voeren commando zoals getoond.

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

U kunt privileges aan een bepaalde gebruiker op een specifieke database toekennen aan het externe IP-adres met behulp van de volgende opdrachten in de MySQL-shell.

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

Bovendien, fouten met toegang geweigerd kan ook het gevolg zijn van problemen met het verbinden met MySQL, zie de eerder uitgelegde fouten.

4. Verbinding met MySQL-server verbroken

U kunt deze fout om een ​​van de volgende redenen tegenkomen:slechte netwerkverbinding , time-out verbinding of een probleem met BLOB waarden die groter zijn dan max_allowed_packet . Zorg in het geval van een netwerkverbindingsprobleem voor een goede netwerkverbinding, vooral als u toegang hebt tot een externe databaseserver.

Als het een time-out voor verbinding . is probleem, vooral wanneer MySQL probeert een eerste verbinding met de server te gebruiken, verhoog de waarde van de connect_timeout parameter. Maar in het geval van BLOB-waarden die groter zijn dan max_allowed_packet , moet u een hogere waarde instellen voor het max_allowed_packet in uw /etc/my.cnf configuratiebestand onder [mysqld] of [client] sectie zoals weergegeven.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Als de MySQL configuratiebestand voor u niet toegankelijk is, kunt u deze waarde instellen met de volgende opdracht in de MySQL-shell.

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

5. Te veel MySQL-verbindingen

In het geval dat een MySQL client komt de "te veel verbindingen . tegen ”-fout, betekent dit dat alle beschikbare verbindingen door andere clients worden gebruikt. Het aantal verbindingen (standaard is 151 ) wordt bestuurd door de max_connections systeemvariabele; u kunt het probleem verhelpen door de waarde ervan te verhogen om meer verbindingen in uw /etc/my.cnf toe te staan configuratiebestand.

[mysqld]
max_connections=1000

6. MySQL vol geheugen

Als u een zoekopdracht uitvoert met behulp van de MySQL client-programma en de betreffende fout tegenkomt, betekent dit dat MySQL niet genoeg geheugen heeft om het volledige queryresultaat op te slaan.

De eerste stap is om ervoor te zorgen dat de zoekopdracht correct is, als dat zo is, doe dan het volgende:

  • als u de MySQL-client rechtstreeks gebruikt, start u deze met --quick switch , om resultaten in de cache uit te schakelen of
  • als u de MyODBC . gebruikt driver, heeft de configuratiegebruikersinterface (UI) een geavanceerd tabblad voor vlaggen. Vink "Resultaat niet cachen . aan “.

Een andere geweldige tool is, MySQL Tuner – een handig script dat verbinding maakt met een draaiende MySQL-server en suggesties geeft voor hoe het kan worden geconfigureerd voor betere prestaties.

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

Lees ons artikel voor MySQL-optimalisatie en tips voor het afstemmen van prestaties:15 handige tips voor het afstemmen en optimaliseren van MySQL/MariaDB.

7. MySQL blijft crashen

Als u dit probleem tegenkomt, moet u proberen te achterhalen of het probleem is dat de MySQL server sterft of dat het de client is met een probleem. Merk op dat veel servercrashes worden veroorzaakt door beschadigde gegevensbestanden of indexbestanden.

U kunt de serverstatus controleren om vast te stellen hoe lang deze al actief is.

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

U kunt ook het volgende mysqladmin-commando uitvoeren om de uptime van de MySQL-server te vinden.

$ sudo mysqladmin version -p 

Andere oplossingen omvatten, maar zijn niet beperkt tot het stoppen van de MySQL server en het inschakelen van foutopsporing, start de service vervolgens opnieuw. U kunt proberen een testcase te maken die kan worden gebruikt om het probleem te herhalen. Open daarnaast een extra terminalvenster en voer de volgende opdracht uit om MySQL-processtatistieken weer te geven terwijl u uw andere query's uitvoert:

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

Waar het op neerkomt:bepalen wat een probleem of een fout veroorzaakt

Hoewel we hebben gekeken naar enkele veelvoorkomende MySQL problemen en fouten en bood ook manieren om problemen op te lossen en op te lossen, het belangrijkste bij het diagnosticeren van een fout is begrijpen wat het betekent (in termen van wat het veroorzaakt).

Dus hoe kun je dit bepalen? De volgende punten zullen u helpen om vast te stellen wat precies een probleem veroorzaakt:

  1. De eerste en belangrijkste stap is om de MySQL-logboeken te bekijken die zijn opgeslagen in de map /var/log/mysql/ . U kunt opdrachtregelhulpprogramma's zoals tail gebruiken om de logbestanden te lezen.
  2. Als de MySQL-service niet start, controleer dan de status met systemctl of gebruik de journetctl (met de -xe flag) commando onder systemd om het probleem te onderzoeken.
  3. Je kunt ook systeemlogbestanden bekijken, zoals /var/log/messages of iets dergelijks om redenen voor uw probleem.
  4. Probeer tools zoals Mytop, glimpen, top, ps of htop te gebruiken om te controleren welk programma alle CPU's in beslag neemt of de machine vergrendelt of om te inspecteren of u onvoldoende geheugen, schijfruimte, bestandsdescriptors of iets anders heeft andere belangrijke bron.
  5. Ervan uitgaande dat dat probleem een ​​of ander op hol geslagen proces is, kun je altijd proberen het te doden (met behulp van het hulpprogramma pkill of kill) zodat MySQL normaal werkt.
  6. Stel dat de mysqld server problemen veroorzaakt, kunt u het commando uitvoeren:mysqladmin -u root ping of mysqladmin -u root processlist om er een reactie van te krijgen.
  7. Als het probleem zit in uw clientprogramma terwijl u verbinding probeert te maken met de MySQL-server, controleer dan waarom het niet goed werkt, probeer er uitvoer van te krijgen voor het oplossen van problemen.

Misschien vind je het ook leuk om deze volgende MySQL-gerelateerde artikelen te lezen:

  1. Leer MySQL / MariaDB voor beginners – deel 1
  2. MySQL/MariaDB-databases bewaken met Netdata op CentOS 7
  3. Alle MySQL-databases overzetten van oude naar nieuwe server
  4. Mytop – Een handig hulpmiddel voor het bewaken van MySQL/MariaDB-prestaties in Linux
  5. 12 MySQL/MariaDB-best practices voor beveiliging voor Linux

Raadpleeg voor meer informatie de MySQL-referentiehandleiding met betrekking tot problemen en veelvoorkomende fouten, deze geeft een uitgebreide lijst van veelvoorkomende problemen en foutmeldingen die u kunt tegenkomen tijdens het gebruik van MySQL, inclusief degene die we hierboven hebben besproken en meer.


  1. KIES * WAAR NIET BESTAAT

  2. MySQL:sorteer GROUP_CONCAT-waarden

  3. Een mysql-database met meerdere tenants ontwerpen

  4. Overschrijf de Query Optimizer voor uw T-SQL-joins met FORCEPLAN