Mysql
 sql >> база данни >  >> RDS >> Mysql

Полезни съвети за отстраняване на често срещани грешки в MySQL

MySQL е широко използвана система за управление на релационни бази данни с отворен код (RDMS ) собственост на Oracle . През годините е бил изборът по подразбиране за уеб-базирани приложения и все още остава популярен в сравнение с други машини за бази данни.

MySQL е проектиран и оптимизиран за уеб приложения – той е неразделна част от основните уеб базирани приложения като Facebook , Туитър , Уикипедия , YouTube , и много други.

Вашият сайт или уеб приложение се захранва от MySQL ? В тази подробна статия ще обясним как да отстранявате проблеми и често срещани грешки в MySQL сървър на база данни. Ще опишем как да определим причините за проблемите и какво да направим, за да ги разрешим.

1. Не мога да се свържа с локален MySQL сървър

Една от често срещаните грешки при свързването между клиент и сървър в MySQL е „ГРЕШКА 2002 (HY000):Не мога да се свържа с локален MySQL сървър чрез сокет '/var/run/mysqld/mysqld.sock' (2) “.

Тази грешка показва, че няма MySQL сървър (mysqld) работи на хост системата или че сте посочили грешно име на Unix сокет файл или TCP/IP порт, когато се опитвате да се свържете със сървъра.

Уверете се, че сървърът работи, като проверите процес с име mysqld на хоста на вашия сървър на база данни, като използвате командата ps и командата grep заедно, както е показано.

$ ps xa | grep mysqld | grep -v mysqld

Ако горните команди не показват изход, значи сървърът на базата данни не работи. Следователно клиентът не може да се свърже с него. За да стартирате сървъра, изпълнете следната команда systemctl.

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

За да проверите MySQL състояние на услугата, използвайте следната команда.

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

От изхода на горната команда, MySQL услугата е неуспешна. В такъв случай можете да опитате да го рестартирате и да проверите състоянието му още веднъж.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Освен това, ако сървърът работи, както е показано от следната команда, но все още виждате горната грешка, трябва също така да проверите дали TCP/IP портът е блокиран от защитна стена или друга услуга за блокиране на портове.

$ ps xa | grep mysqld | grep -v mysqld

За да намерите порта, който сървърът слуша, използвайте командата netstat, както е показано.

$ sudo netstat -tlpn | grep "mysql"

2. Не мога да се свържа с MySQL сървър

Друга често срещана грешка при връзката е „(2003) Не мога да се свържа с MySQL сървър на „сървър“ (10061) “, което означава, че мрежовата връзка е отказана.

Тук започнете, като проверите дали има MySQL сървър, работещ в системата, както е показано по-горе. Също така се уверете, че сървърът има активирани мрежови връзки и че мрежовият порт, който използвате за свързване, е този, който е конфигуриран на сървъра.

Други често срещани грешки, които е вероятно да срещнете, когато се опитате да се свържете с MySQL сървъра, са:

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)

Тези грешки показват, че сървърът може да работи, но вие се опитвате да се свържете чрез TCP/IP порт, именуван канал или Unix сокет файл, различен от този, на който сървърът слуша.

3. Грешки за отказан достъп в MySQL

В MySQL , потребителският акаунт се дефинира по отношение на потребителско име и клиентския хост или хостове, от които потребителят може да се свърже със сървъра. В допълнение, акаунтът може също да има идентификационни данни за удостоверяване, като например парола.

Въпреки че има много различни причини за „Отказан достъп ” грешки, една от често срещаните причини е свързана с MySQL акаунтите, които сървърът позволява на клиентските програми да използват при свързване. Показва, че потребителско име посочено във връзката няма права за достъп до базата данни.

MySQL позволява създаването на акаунти, които позволяват на клиентите да се свързват със сървъра и да имат достъп до данни, управлявани от сървъра. В тази връзка, ако срещнете грешка за отказан достъп , проверете дали потребителският акаунт има право да се свързва със сървъра чрез клиентската програма, която използвате, и евентуално хоста, от който идва връзката.

Можете да видите какви привилегии има даден акаунт, като стартирате SHOW GRANTS команда, както е показано.

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

Можете да предоставите привилегии на конкретен потребител в конкретна база данни на отдалечения IP адрес, като използвате следните команди в обвивката на MySQL.

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

Освен това, грешки за отказан достъп може също да е резултат от проблеми със свързването с MySQL, вижте обяснените по-горе грешки.

4. Загубена връзка с MySQL сървър

Може да срещнете тази грешка поради една от следните причини:лоша мрежова свързаност , изчакване на връзката или проблем с BLOB стойности, които са по-големи от max_allowed_packet . В случай на проблем с мрежовата връзка, уверете се, че имате добра мрежова връзка, особено ако имате достъп до отдалечен сървър на база данни.

Ако това е време за изчакване на връзката проблем, особено когато MySQL се опитва да използва първоначална връзка със сървъра, увеличете стойността на connect_timeout параметър. Но в случай на BLOB стойности които са по-големи от max_allowed_packet , трябва да зададете по-висока стойност за max_allowed_packet във вашия /etc/my.cnf конфигурационен файл под [mysqld] или [client] раздел, както е показано.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ако MySQL конфигурационният файл не е достъпен за вас, тогава можете да зададете тази стойност, като използвате следната команда в обвивката на MySQL.

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

5. Твърде много MySQL връзки

В случай, че MySQL клиентът среща „твърде много връзки ” грешка, това означава, че всички налични връзки се използват от други клиенти. Броят на връзките (по подразбиране е 151 ) се контролира от max_connections системна променлива; можете да отстраните проблема, като увеличите стойността му, за да позволите повече връзки във вашия /etc/my.cnf конфигурационен файл.

[mysqld]
max_connections=1000

6. Няма памет MySQL

В случай, че изпълнявате заявка с помощта на MySQL клиентска програма и срещнете въпросната грешка, това означава, че MySQL няма достатъчно памет, за да съхрани целия резултат от заявката.

Първата стъпка е да се уверите, че заявката е правилна, ако е така, направете следното:

  • ако използвате MySQL клиент директно, стартирайте го с --quick switch , за да деактивирате кешираните резултати или
  • ако използвате MyODBC драйвер, потребителският интерфейс за конфигурация (UI) има разширен раздел за флагове. Поставете отметка „Не кеширайте резултата “.

Друг страхотен инструмент е MySQL Tuner – полезен скрипт, който ще се свърже с работещ MySQL сървър и дава предложения как може да бъде конфигуриран за по-висока производителност.

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

За съвети за оптимизация и настройка на производителността на MySQL прочетете нашата статия:15 полезни съвета за настройка и оптимизация на MySQL/MariaDB.

7. MySQL продължава да се срива

Ако срещнете този проблем, трябва да опитате да разберете дали проблемът е, че MySQL сървърът умира или дали клиентът има проблем. Имайте предвид, че много сривове на сървъра са причинени от повредени файлове с данни или индексни файлове.

Можете да проверите състоянието на сървъра, за да установите колко време е работил и работи.

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

Като алтернатива, изпълнете следната команда mysqladmin, за да намерите време за работа на MySQL сървъра.

$ sudo mysqladmin version -p 

Други решения включват, но не се ограничават до спиране на MySQL сървър и активиране на отстраняване на грешки, след което стартирайте услугата отново. Можете да опитате да направите тестов случай, който може да се използва за повторение на проблема. Освен това отворете допълнителен прозорец на терминала и изпълнете следната команда, за да покажете статистиката на процеса на MySQL, докато изпълнявате другите си заявки:

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

Най-долният ред:Определяне на това, което причинява проблем или грешка

Въпреки че разгледахме някои често срещани MySQL проблеми и грешки, както и начини за отстраняване на неизправности и тяхното решаване, най-важното нещо при диагностицирането на грешка е да се разбере какво означава тя (по отношение на това, което я причинява).

И така, как можете да определите това? Следните точки ще ви насочат как да установите какво точно причинява проблем:

  1. Първата и най-важна стъпка е да разгледате регистрационните файлове на MySQL, които се съхраняват в директорията /var/log/mysql/ . Можете да използвате помощни програми на командния ред, като tail, за да прочетете регистрационните файлове.
  2. Ако услугата MySQL не успее да се стартира, проверете състоянието й, като използвате systemctl или използвайте journetctl-xe флаг) команда под systemd, за да проучите проблема.
  3. Можете също да прегледате системния регистрационен файл, като /var/log/messages или подобни по причини за вашия проблем.
  4. Опитайте да използвате инструменти като Mytop, glances, top, ps или htop, за да проверите коя програма заема целия процесор или заключва машината, или да проверите дали ви липсва памет, дисково пространство, файлови дескриптори или някои друг важен ресурс.
  5. Ако приемем, че проблемът е някакъв неуспешен процес, винаги можете да опитате да го убиете (с помощта на помощната програма pkill или kill), така че MySQL да работи нормално.
  6. Да предположим, че mysqld сървърът причинява проблеми, можете да изпълните командата:mysqladmin -u root ping или mysqladmin -u root processlist за да получите отговор от него.
  7. Ако проблемът е във вашата клиентска програма, докато се опитвате да се свържете с MySQL сървъра, проверете защо не работи добре, опитайте се да получите какъвто и да е изход от нея за целите на отстраняване на неизправности.

Може също да искате да прочетете следните статии, свързани с MySQL:

  1. Научете MySQL / MariaDB за начинаещи – част 1
  2. Как да наблюдавате MySQL/MariaDB бази данни с помощта на Netdata на CentOS 7
  3. Как да прехвърля всички MySQL бази данни от стар към нов сървър
  4. Mytop – полезен инструмент за наблюдение на производителността на MySQL/MariaDB в Linux
  5. 12 най-добри практики за сигурност на MySQL/MariaDB за Linux

За повече информация вижте справочното ръководство за MySQL относно проблеми и често срещани грешки, то изброява изчерпателно често срещани проблеми и съобщения за грешки, които може да срещнете, докато използвате MySQL, включително тези, които обсъдихме по-горе и още.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преглед на кръстосаната репликация на PostgreSQL и MySQL

  2. Преглед на новите функции за аналитичен прозорец в MySQL 8.0

  3. Как да премахнете всички MySQL таблици от командния ред без DROP разрешения за база данни?

  4. Как да премина през MySQL заявка чрез PDO в PHP?

  5. Как да защитим MySQL:Част втора