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

Nyttige tips til fejlfinding af almindelige fejl i MySQL

MySQL er et udbredt open source relationsdatabasestyringssystem (RDMS ) ejet af Oracle . Det har gennem årene været standardvalget for webbaserede applikationer og er stadig populær i sammenligning med andre databasemotorer.

MySQL blev designet og optimeret til webapplikationer – det udgør en integreret del af store webbaserede applikationer såsom Facebook , Twitter , Wikipedia , YouTube , og mange andre.

Er dit websted eller din webapplikation drevet af MySQL ? I denne detaljerede artikel vil vi forklare, hvordan du fejlfinder problemer og almindelige fejl i MySQL database server. Vi vil beskrive, hvordan man bestemmer årsagerne til problemerne, og hvad man skal gøre for at løse dem.

1. Kan ikke oprette forbindelse til lokal MySQL-server

En af de almindelige klient-til-server-forbindelsesfejl i MySQL er "FEJL 2002 (HY000):Kan ikke oprette forbindelse til lokal MySQL-server gennem socket '/var/run/mysqld/mysqld.sock' (2) ”.

Denne fejl indikerer, at der ikke er nogen MySQL server (mysqld) kører på værtssystemet, eller at du har angivet et forkert Unix-socket-filnavn eller TCP/IP port, når du forsøger at oprette forbindelse til serveren.

Sørg for, at serveren kører ved at kontrollere en proces ved navn mysqld på din databaseservervært ved at bruge kommandoen ps og grep sammen som vist.

$ ps xa | grep mysqld | grep -v mysqld

Hvis ovenstående kommandoer ikke viser noget output, kører databaseserveren ikke. Derfor kan klienten ikke oprette forbindelse til den. For at starte serveren skal du køre følgende systemctl-kommando.

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

For at bekræfte MySQL tjenestestatus, skal du bruge følgende kommando.

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

Fra outputtet af ovenstående kommando, MySQL tjenesten mislykkedes. I et sådant tilfælde kan du prøve at genstarte den og kontrollere dens status igen.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Derudover, hvis serveren kører som vist med følgende kommando, men du stadig ser ovenstående fejl, skal du også kontrollere, at TCP/IP port er blokeret af en firewall eller en hvilken som helst portblokerende tjeneste.

$ ps xa | grep mysqld | grep -v mysqld

For at finde den port, serveren lytter på, skal du bruge netstat-kommandoen som vist.

$ sudo netstat -tlpn | grep "mysql"

2. Kan ikke oprette forbindelse til MySQL-server

En anden almindeligt forekommende forbindelsesfejl er "(2003) Kan ikke oprette forbindelse til MySQL-server på 'server' (10061) ”, hvilket betyder, at netværksforbindelsen er blevet nægtet.

Start her med at kontrollere, at der er en MySQL server, der kører på systemet som vist ovenfor. Sørg også for, at serveren har netværksforbindelser aktiveret, og at den netværksport, du bruger til at forbinde, er den, der er konfigureret på serveren.

Andre almindelige fejl, du sandsynligvis vil støde på, når du forsøger at oprette forbindelse til MySQL-serveren, er:

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)

Disse fejl indikerer, at serveren muligvis kører, men du forsøger at oprette forbindelse ved hjælp af en TCP/IP port, named pipe eller Unix-socket-fil forskellig fra den, serveren lytter til.

3. Adgang nægtet fejl i MySQL

I MySQL , er en brugerkonto defineret som et brugernavn og klientværten eller værterne, hvorfra brugeren kan oprette forbindelse til serveren. Derudover kan en konto også have autentificeringsoplysninger såsom en adgangskode.

Selvom der er mange forskellige årsager til "Adgang nægtet ”-fejl, er en af ​​de almindelige årsager relateret til de MySQL-konti, som serveren tillader klientprogrammer at bruge, når de opretter forbindelse. Det angiver, at brugernavn angivet i forbindelsen har ikke rettigheder til at få adgang til databasen.

MySQL tillader oprettelse af konti, der gør det muligt for klientbrugere at oprette forbindelse til serveren og få adgang til data, der administreres af serveren. I denne forbindelse, hvis du støder på en adgang nægtet fejl , tjek om brugerkontoen har tilladelse til at oprette forbindelse til serveren via det klientprogram, du bruger, og muligvis værten, som forbindelsen kommer fra.

Du kan se, hvilke privilegier en given konto har ved at køre SHOW GRANTS kommando som vist.

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

Du kan tildele privilegier til en bestemt bruger på en specifik database til den eksterne ip-adresse ved at bruge følgende kommandoer i MySQL-skallen.

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

Desuden adgang nægtet fejl kan også skyldes problemer med at oprette forbindelse til MySQL, se de tidligere forklarede fejl.

4. Mistet forbindelse til MySQL-server

Du kan støde på denne fejl på grund af en af ​​følgende årsager:dårlig netværksforbindelse , timeout for forbindelsen eller et problem med BLOB værdier, der er større end max_allowed_packet . I tilfælde af et netværksforbindelsesproblem skal du sikre dig, at du har en god netværksforbindelse, især hvis du har adgang til en ekstern databaseserver.

Hvis det er en forbindelsestimeout problem, især når MySQL forsøger at bruge en indledende forbindelse til serveren, skal du øge værdien af ​​connect_timeout parameter. Men i tilfælde af BLOB-værdier der er større end max_allowed_packet , skal du indstille en højere værdi for max_allowed_packet i din /etc/my.cnf konfigurationsfil under [mysqld] eller [client] sektion som vist.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Hvis MySQL konfigurationsfilen ikke er tilgængelig for dig, så kan du indstille denne værdi ved hjælp af følgende kommando i MySQL-skallen.

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

5. For mange MySQL-forbindelser

I tilfælde af en MySQL klient støder på "for mange forbindelser ” fejl, betyder det, at alle tilgængelige forbindelser er i brug af andre klienter. Antallet af forbindelser (standard er 151 ) styres af max_connections systemvariabel; du kan afhjælpe problemet ved at øge dets værdi for at tillade flere forbindelser i din /etc/my.cnf konfigurationsfil.

[mysqld]
max_connections=1000

6. Ingen hukommelse MySQL

Hvis du kører en forespørgsel ved hjælp af MySQL klientprogram og støder på den pågældende fejl, betyder det, at MySQL ikke har nok hukommelse til at gemme hele forespørgselsresultatet.

Det første trin er at sikre, at forespørgslen er korrekt, hvis den er, så gør følgende:

  • hvis du bruger MySQL-klient direkte, start den med --quick switch , for at deaktivere cachelagrede resultater eller
  • hvis du bruger MyODBC driver, har konfigurationsbrugergrænsefladen (UI) en avanceret fane til flag. Markér "Cache ikke resultat “.

Et andet godt værktøj er MySQL Tuner – et nyttigt script, der forbinder til en kørende MySQL-server og giver forslag til, hvordan det kan konfigureres til højere ydeevne.

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

For tips til MySQL-optimering og justering af ydeevne, læs vores artikel:15 nyttige MySQL/MariaDB-tip til justering af ydeevne og optimering.

7. MySQL bliver ved med at crashe

Hvis du støder på dette problem, bør du prøve at finde ud af, om problemet er, at MySQL serveren dør, eller om det er klienten med et problem. Bemærk, at mange servernedbrud er forårsaget af beskadigede datafiler eller indeksfiler.

Du kan kontrollere serverstatus for at fastslå, hvor længe den har været oppe og køre.

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

Alternativt kan du køre følgende mysqladmin-kommando for at finde oppetid på MySQL-serveren.

$ sudo mysqladmin version -p 

Andre løsninger inkluderer, men ikke begrænset til, at stoppe MySQL server og aktiverer debugging, og start derefter tjenesten igen. Du kan prøve at lave en testcase, der kan bruges til at gentage problemet. Derudover skal du åbne et ekstra terminalvindue og køre følgende kommando for at vise MySQL-processtatistik, mens du kører dine andre forespørgsler:

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

Bundlinjen:Bestemmelse af, hvad der forårsager et problem eller en fejl

Selvom vi har set på nogle almindelige MySQL problemer og fejl og også gav måder at fejlfinde og løse dem på, er det vigtigste ved at diagnosticere en fejl at forstå, hvad den betyder (med hensyn til, hvad der forårsager den).

Så hvordan kan du bestemme dette? Følgende punkter vil guide dig til, hvordan du finder ud af, hvad der præcist forårsager et problem:

  1. Det første og vigtigste trin er at se på MySQL-logfilerne, som er gemt i mappen /var/log/mysql/ . Du kan bruge kommandolinjeværktøjer såsom tail til at læse logfilerne igennem.
  2. Hvis MySQL-tjenesten ikke starter, skal du kontrollere dens status ved hjælp af systemctl eller bruge journetctl (med -xe flag) kommando under systemd for at undersøge problemet.
  3. Du kan også undersøge systemlogfilen såsom /var/log/messages eller lignende af årsager til dit problem.
  4. Prøv at bruge værktøjer såsom Mytop, glances, top, ps eller htop for at kontrollere, hvilket program der tager al CPU eller låser maskinen eller for at undersøge, om du løber tør for hukommelse, diskplads, filbeskrivelser eller nogle anden vigtig ressource.
  5. Forudsat at problemet er en løbsk proces, kan du altid prøve at dræbe det (ved at bruge pkill eller kill-værktøjet), så MySQL fungerer normalt.
  6. Forudsat at mysqld serveren forårsager problemer, kan du køre kommandoen:mysqladmin -u root ping eller mysqladmin -u root processlist for at få noget svar fra det.
  7. Hvis problemet er med dit klientprogram, mens du forsøger at oprette forbindelse til MySQL-serveren, så tjek hvorfor det ikke fungerer fint, prøv at få noget output fra det til fejlfindingsformål.

Du kan også lide at læse disse følgende MySQL-relaterede artikler:

  1. Lær MySQL / MariaDB for begyndere – del 1
  2. Sådan overvåger du MySQL/MariaDB-databaser ved hjælp af Netdata på CentOS 7
  3. Sådan overføres alle MySQL-databaser fra gammel til ny server
  4. Mytop – Et nyttigt værktøj til overvågning af MySQL/MariaDB-ydeevne i Linux
  5. 12 MySQL/MariaDB-sikkerhedsmetoder for Linux

For mere information, se MySQL-referencemanualen vedrørende problemer og almindelige fejl, den indeholder en omfattende liste over almindelige problemer og fejlmeddelelser, som du kan støde på, mens du bruger MySQL, inklusive dem, vi har diskuteret ovenfor og mere.


  1. ClusterControl - Advanced Backup Management - PostgreSQL

  2. Brug af Oracle JDeveloper 12c med Oracle Database 12c på Oracle Cloud Platform, del 2

  3. PHP MySQL Google Chart JSON - Komplet eksempel

  4. Nulstil AutoIncrement i SQL Server efter sletning