Noderīgi padomi, lai novērstu MySQL izplatītās kļūdas


MySQL ir plaši izmantota Oracle piederošā atvērtā pirmkoda relāciju datu bāzes pārvaldības sistēma (RDMS). Gadu gaitā tā ir noklusējuma izvēle tīmekļa lietojumprogrammām un joprojām ir populāra salīdzinājumā ar citiem datu bāzu dzinējiem.

MySQL tika izstrādāts un optimizēts tīmekļa lietojumprogrammām - tas ir neatņemama sastāvdaļa galvenajās tīmekļa lietojumprogrammās, piemēram, Facebook, Twitter, Wikipedia, YouTube un daudzās citās.

Vai jūsu vietni vai tīmekļa lietojumprogrammu nodrošina MySQL? Šajā detalizētajā rakstā mēs paskaidrosim, kā novērst problēmas un bieži sastopamās kļūdas MySQL datu bāzes serverī. Mēs aprakstīsim, kā noteikt problēmu cēloņus un kā rīkoties, lai tos atrisinātu.

1. Nevar izveidot savienojumu ar vietējo MySQL serveri

Viena no izplatītākajām MySQL klienta un servera savienojuma kļūdām ir “ERROR 2002 (HY000): Nevar izveidot savienojumu ar vietējo MySQL serveri, izmantojot ligzdu‘ /var/run/mysqld/mysqld.sock ’(2).

Šī kļūda norāda, ka resursdatora sistēmā nedarbojas MySQL serveris (mysqld) vai ka, mēģinot izveidot savienojumu ar serveri, esat norādījis nepareizu Unix ligzdas faila nosaukumu vai TCP/IP portu.

Pārliecinieties, vai serveris darbojas, pārbaudot procesu ar nosaukumu mysqld datu bāzes servera resursdatorā, izmantojot komandu grep kopā, kā parādīts.

$ ps xa | grep mysqld | grep -v mysqld

Ja iepriekšminētās komandas neparāda izvadi, datu bāzes serveris nedarbojas. Tāpēc klients nevar izveidot savienojumu ar to. Lai palaistu serveri, palaidiet šādu komandu systemctl.

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

Lai pārbaudītu MySQL pakalpojuma statusu, izmantojiet šo komandu.

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

No iepriekšminētās komandas izejas MySQL pakalpojums neizdevās. Šādā gadījumā varat mēģināt to restartēt un vēlreiz pārbaudīt tā statusu.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Turklāt, ja serveris darbojas, kā parādīts šajā komandā, bet jūs joprojām redzat iepriekš minēto kļūdu, jums arī jāpārbauda, vai TCP/IP portu bloķē ugunsmūris vai jebkurš portu bloķēšanas pakalpojums.

$ ps xa | grep mysqld | grep -v mysqld

Lai netstat komandu, kā parādīts.

$ sudo netstat -tlpn | grep "mysql"

2. Nevar izveidot savienojumu ar MySQL serveri

Vēl viena bieži sastopama savienojuma kļūda ir “(2003) Nevar izveidot savienojumu ar MySQL serveri“ serverī ”(10061)”, kas nozīmē, ka tīkla savienojums ir atteikts.

Šeit vispirms pārbaudiet, vai sistēmā darbojas MySQL serveris, kā parādīts iepriekš. Pārliecinieties arī, vai serverī ir iespējoti tīkla savienojumi un vai tīkla ports, kuru izmantojat savienojumam, ir konfigurēts serverī.

Citas bieži sastopamās kļūdas, ar kurām, iespējams, sastopaties, mēģinot izveidot savienojumu ar MySQL serveri, ir šādas:

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)

Šīs kļūdas norāda, ka serveris, iespējams, darbojas, tomēr jūs mēģināt izveidot savienojumu, izmantojot TCP/IP portu ar nosaukumu pipe vai Unix ligzdas failu, kas atšķiras no tā, kurā serveris klausās.

3. Piekļuve MySQL kļūdām

MySQL lietotāja konts tiek definēts kā lietotājvārds un klienta resursdators vai resursdatori, no kuriem lietotājs var izveidot savienojumu ar serveri. Turklāt kontā var būt arī autentifikācijas akreditācijas dati, piemēram, parole.

Lai gan ir daudz dažādu kļūdu “Piekļuve liegta” cēloņu, viens no izplatītākajiem cēloņiem ir saistīts ar MySQL kontiem, kurus serveris ļauj klienta programmām izmantot, veidojot savienojumu. Tas norāda, ka savienojumā norādītajam lietotājvārdam nav tiesību piekļūt datu bāzei.

MySQL ļauj izveidot kontus, kas ļauj klienta lietotājiem izveidot savienojumu ar serveri un piekļūt servera pārvaldītajiem datiem. Šajā sakarā, ja rodas kļūda piekļuvei liegta, pārbaudiet, vai lietotāja kontam ir atļauts izveidot savienojumu ar serveri, izmantojot jūsu izmantoto klienta programmu, un, iespējams, resursdatoru, no kura nāk savienojums.

Varat uzzināt, kādas privilēģijas ir konkrētam kontam, palaižot komandu RĀDĪT GRANTUS , kā parādīts.

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

Jūs varat piešķirt privilēģijas konkrētam lietotājam noteiktā datu bāzē uz attālo ip adresi, izmantojot šādas MySQL čaulas komandas.

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

Turklāt piekļuves liegšanas kļūdas var izraisīt arī problēmas ar savienojumu ar MySQL.

4. Zaudēts savienojums ar MySQL serveri

Šī kļūda var rasties kāda no šiem iemesliem dēļ: slikta tīkla savienojamība, savienojuma noildze vai problēma ar BLOB vērtībām, kas ir lielākas par max_allowed_packet. Tīkla savienojuma problēmu gadījumā pārliecinieties, vai jums ir labs tīkla savienojums, īpaši, ja piekļūstat attālajam datu bāzes serverim.

Ja tā ir savienojuma taimauta problēma, it īpaši, ja MySQL mēģina izmantot sākotnējo savienojumu ar serveri, palieliniet parametra connect_timeout vērtību. Bet, ja BLOB vērtības ir lielākas par max_allowed_packet, jums /etc/my.cnf konfigurācijas failā sadaļā [mysqld] vai [client] jāiestata augstāka vērtība max_allowed_packet. sadaļa, kā parādīts.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ja MySQL konfigurācijas fails jums nav pieejams, varat iestatīt šo vērtību, izmantojot šo komandu MySQL čaulā.

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

5. Pārāk daudz MySQL savienojumu

Gadījumā, ja MySQL klients sastopas ar kļūdu “pārāk daudz savienojumu”, tas nozīmē, ka visus pieejamos savienojumus izmanto citi klienti. Savienojumu skaitu (noklusējums ir 151) kontrolē sistēmas mainīgais max_connections ; problēmu var novērst, palielinot tās vērtību, lai atļautu vairāk savienojumu /etc/my.cnf konfigurācijas failā.

[mysqld]
max_connections=1000

6. Atmiņā nav MySQL

Ja vaicājumu izpildāt, izmantojot MySQL klienta programmu, un rodas attiecīgā kļūda, tas nozīmē, ka MySQL nav pietiekami daudz atmiņas, lai saglabātu visu vaicājuma rezultātu.

Vispirms ir jānodrošina vaicājuma pareizība, ja tā ir, tad rīkojieties šādi:

  • ja tieši izmantojat MySQL klientu, sāciet to ar --quick switch , lai atspējotu kešatmiņā saglabātos rezultātus vai
  • ja izmantojat MyODBC draiveri, konfigurācijas lietotāja saskarnē (UI) ir papildu cilne karodziņiem. Atzīmējiet izvēles rūtiņu “Neuzkrāt kešatmiņu”.

Vēl viens lielisks rīks ir MySQL Tuner - noderīgs skripts, kas izveidos savienojumu ar darbojošos MySQL serveri un sniegs ieteikumus, kā to var konfigurēt augstākai veiktspējai.

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

Lai iegūtu padomus par MySQL optimizāciju un veiktspējas pielāgošanu, izlasiet mūsu rakstu: 15 noderīgi MySQL/MariaDB veiktspējas regulēšanas un optimizācijas padomi.

7. MySQL saglabā avāriju

Ja rodas šī problēma, jums jāmēģina noskaidrot, vai problēma ir tajā, ka MySQL serveris mirst, vai arī klientam ir kāda problēma. Ņemiet vērā, ka daudzas servera avārijas izraisa bojāti datu faili vai indeksu faili.

Jūs varat pārbaudīt servera statusu, lai noteiktu, cik ilgi tas darbojas un darbojas.

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

Varat arī palaist šo mysqladmin komandu, lai atrastu MySQL servera darbības laiku.

$ sudo mysqladmin version -p 

Citi risinājumi ietver, bet neaprobežojas ar MySQL servera apturēšanu un atkļūdošanas iespējošanu, pēc tam palaidiet pakalpojumu no jauna. Jūs varat mēģināt izveidot testa gadījumu, kuru var izmantot, lai atkārtotu problēmu. Turklāt, atverot papildu vaicājumus, atveriet papildu termināļa logu un izpildiet šo komandu, lai parādītu MySQL procesa statistiku:

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

Lai gan mēs esam apskatījuši dažas izplatītas MySQL problēmas un kļūdas, kā arī snieguši veidus, kā novērst un novērst problēmas, vissvarīgākais ar kļūdas diagnosticēšanu ir saprast, ko tas nozīmē (attiecībā uz to, kas to izraisa).

Tātad, kā jūs to varat noteikt? Šie punkti palīdzēs jums uzzināt, kas tieši rada problēmu:

  1. Pirmais un vissvarīgākais solis ir izpētīt MySQL žurnālus, kas tiek glabāti direktorijā /var/log/mysql/. Lai lasītu žurnālfailus, varat izmantot komandrindas utilītus, piemēram, asti.
  2. Ja MySQL pakalpojums neizdodas startēt, pārbaudiet tā statusu, izmantojot systemctl, vai izmantojiet komandu journetctl (ar karogu -xe ), lai pārbaudītu problēmu.
  3. Problēmas iemeslu dēļ varat pārbaudīt arī sistēmas žurnāla failu, piemēram, /var/log/messages vai tamlīdzīgu.
  4. Mēģiniet izmantot tādus rīkus kā htop, lai pārbaudītu, kura programma aizņem visu procesoru vai bloķē iekārtu, vai pārbaudiet, vai jums pietrūkst atmiņas, diska vietas, failu aprakstus vai kādu citu svarīgu resursu.
  5. Pieņemot, ka problēma ir kāds pārbēdzošs process, jūs vienmēr varat mēģināt to nogalināt (izmantojot utilītu pkill vai kill), lai MySQL darbotos normāli.
  6. Pieņemot, ka mysqld serveris rada problēmas, varat palaist komandu: mysqladmin -u root ping vai mysqladmin -u root processlist , lai no tā saņemtu atbildi.
  7. Ja problēma ir saistīta ar klienta programmu, mēģinot izveidot savienojumu ar MySQL serveri, pārbaudiet, kāpēc tā nedarbojas labi, mēģiniet iegūt jebkādu tās izeju problēmu novēršanas nolūkos.

Varat arī izlasīt šos ar MySQL saistītos rakstus:

  1. Uzziniet MySQL/MariaDB iesācējiem - 1. daļa
  2. Kā uzraudzīt MySQL/MariaDB datu bāzes, izmantojot NetData uz CentOS 7
  3. Kā visas MySQL datu bāzes pārsūtīt no vecā uz jauno serveri
  4. Mytop - noderīgs rīks MySQL/MariaDB veiktspējas uzraudzībai Linux
  5. 12 MySQL/MariaDB drošības paraugprakse Linux

Lai iegūtu papildinformāciju, skatiet MySQL rokasgrāmatu par problēmām un izplatītākajām kļūdām, tajā ir visaptveroši uzskaitītas biežākās problēmas un kļūdu ziņojumi, ar kuriem var rasties, lietojot MySQL, ieskaitot tos, par kuriem mēs iepriekš runājām un vairāk.