Nyttige tip til fejlfinding af almindelige fejl i MySQL


MySQL er et almindeligt anvendt open source relationsdatabasestyringssystem (RDMS), der ejes af Oracle. Det har gennem årene været standardvalget for webbaserede applikationer og er stadig populært sammenlignet med andre databasemotorer.

MySQL blev designet og optimeret til webapplikationer - det udgør en integreret del af større webbaserede applikationer 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 foretager fejlfinding af problemer og almindelige fejl på MySQL-databaseserver. Vi vil beskrive, hvordan man kan bestemme å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 serverforbindelsesfejl i MySQL er “ERROR 2002 (HY000): Kan ikke oprette forbindelse til lokal MySQL-server via socket‘ /var/run/mysqld/mysqld.sock ’(2)”.

Denne fejl angiver, at der ikke kører en MySQL-server (mysqld) på værtssystemet, eller at du har angivet et forkert Unix-sokkelfilnavn eller TCP/IP-port, når du prøver at oprette forbindelse til serveren.

Sørg for, at serveren kører ved at kontrollere en proces med navnet mysqld på din databaseserverhost ved hjælp af grep-kommandoen 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 det. 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

Brug følgende kommando for at kontrollere MySQL-servicestatus.

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

Fra output fra ovenstående kommando mislykkedes MySQL-tjenesten. I et sådant tilfælde kan du prøve at genstarte det og kontrollere dets 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-porten er blokeret af en firewall eller en hvilken som helst portblokeringstjeneste.

$ ps xa | grep mysqld | grep -v mysqld

Til netstat-kommando 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 afvist.

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

Andre almindelige fejl, som du sandsynligvis støder på, når du prøver 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 prøver at oprette forbindelse med en TCP/IP-port, med navnet pipe eller Unix-sokkelfil, der er forskellig fra den, som serveren lytter til.

3. Få adgang til afviste fejl i MySQL

I MySQL defineres en brugerkonto i form af et brugernavn og den eller de klientværter, hvorfra brugeren kan oprette forbindelse til serveren. Derudover kan en konto også have godkendelsesoplysninger såsom en adgangskode.

Selv om der er mange forskellige årsager til "Adgang nægtet" -fejl, er en af de almindelige årsager relateret til MySQL-konti, som serveren tillader, at klientprogrammer bruger, når de opretter forbindelse. Det angiver, at det brugernavn, der er angivet i forbindelsen, ikke har 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 henseende, hvis du støder på en nægtet adgangsfejl, skal du kontrollere, om brugerkontoen har lov til at oprette forbindelse til serveren via det klientprogram, du bruger, og muligvis den vært, hvorfra forbindelsen kommer.

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

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

Du kan give privilegier til en bestemt bruger i en bestemt database til den eksterne ip-adresse ved hjælp af følgende kommandoer i MySQL-shell.

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

Desuden kan adgang nægtet fejl 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 forbindelse 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 får adgang til en ekstern databaseserver.

Hvis det er et forbindelses-timeout-problem, især når MySQL forsøger at bruge en indledende forbindelse til serveren, skal du øge værdien af parameteren connect_timeout. 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, kan du indstille denne værdi ved hjælp af følgende kommando i MySQL-shell.

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

5. For mange MySQL-forbindelser

Hvis en MySQL-klient støder på fejlen "for mange forbindelser", betyder det, at alle tilgængelige forbindelser er i brug af andre klienter. Antallet af forbindelser (standard er 151) styres af systemvariablen max_connections ; 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. Uden hukommelse MySQL

Hvis du kører en forespørgsel ved hjælp af MySQL-klientprogrammet 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, skal du gøre følgende:

  • hvis du bruger MySQL-klienten direkte, skal du starte den med - quick switch for at deaktivere cachelagrede resultater eller
  • hvis du bruger MyODBC-driveren, har brugergrænsefladen til konfiguration (UI) en avanceret fane til flag. Marker “Ikke cache-resultat”.

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

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

For tip til MySQL-optimering og performance-tuning, læs vores artikel: 15 Nyttige MySQL/MariaDB Performance Tuning og optimeringstips.

7. MySQL fortsætter med at gå ned

Hvis du støder på dette problem, skal 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 i gang.

$ 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 for MySQL-serveren.

$ sudo mysqladmin version -p 

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

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

Selvom vi har set på nogle almindelige MySQL-problemer og -fejl og også givet måder til fejlfinding og løsning af dem, er det vigtigste ved diagnosticering af en fejl at forstå, hvad det betyder (med hensyn til hvad der forårsager det).

Så hvordan kan du bestemme dette? Følgende punkter vil guide dig om, hvordan du finder ud af, hvad der nøjagtigt forårsager et problem:

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

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

  1. Lær MySQL/MariaDB for begyndere - Del 1
  2. Sådan overvåges 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 Security Best Practices for Linux

For mere information, se MySQL Referencehåndbogen vedrørende problemer og almindelige fejl, den viser omfattende problemer og fejlmeddelelser, som du kan støde på, mens du bruger MySQL, herunder dem, vi har diskuteret ovenfor og mere.