Nëtzlech Tipps fir gemeinsame Feeler am MySQL ze léisen


MySQL ass e wäit benotzte Open Source relational Datebank Management System (RDMS) am Besëtz vun Oracle. Et war iwwer d'Jore d'Standardwahl fir Web-baséiert Uwendungen a bleift ëmmer nach populär am Verglach mat anere Datebankmotoren.

MySQL gouf fir Webapplikatiounen entworf an optimiséiert - et ass en integralen Deel vu grousse webbaséierten Uwendungen wéi Facebook, Twitter, Wikipedia, YouTube a vill anerer.

Ass Är Site oder Webapplikatioun mat MySQL ugedriwwen? An dësem detailléierte Artikel wäerte mir erkläre wéi Dir Probleemer a gemeinsame Feeler am MySQL Datebankserver léist. Mir beschreiwen wéi d'Ursaachen vun de Problemer ze bestëmmen a wat ze maachen fir se ze léisen.

1. Kann net mat lokalen MySQL Server verbannen

Ee vun de gemeinsame Client-zu-Serververbindungsfehler am MySQL ass ERROR 2002 (HY000): Kann net mam lokalen MySQL-Server duerch Socket '/var/run/mysqld/mysqld.sock (2) verbannen.

Dëse Feeler weist datt et kee MySQL Server (mysqld) am Hostsystem leeft oder datt Dir e falschen Unix Socket Dateinumm oder TCP/IP Hafen uginn hutt wann Dir probéiert mam Server ze verbannen.

Vergewëssert Iech datt de Server leeft andeems Dir e Prozess mam Numm mysqld op Ärem Datebankserverhost iwwerpréift mat dem grep Kommando zesummen wéi gewisen.

$ ps xa | grep mysqld | grep -v mysqld

Wann déi uewe genannte Kommandoen keen Ausgang weisen, da leeft den Datebankserver net. Dofir kann de Client net mat him verbannen. Fir de Server ze starten, fuert de folgende systemctl Kommando.

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

Fir de MySQL Service Status z'iwwerpréiwen, benotzt de folgende Kommando.

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

Vun der Ausgab vum uewe genannte Kommando ass de MySQL Service gescheitert. An esou engem Fall kënnt Dir probéieren et nei ze starten a säi Status nach eng Kéier z'iwwerpréiwen.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Zousätzlech, wann de Server leeft wéi de folgende Kommando gewisen, awer Dir gesitt nach ëmmer den uewe genannte Feeler, sollt Dir och verifizéieren datt den TCP/IP Hafen vun enger Firewall oder engem Portblocking Service blockéiert ass.

$ ps xa | grep mysqld | grep -v mysqld

Fir netstat Kommando wéi gewisen.

$ sudo netstat -tlpn | grep "mysql"

2. Kann net mat MySQL Server verbannen

En aneren allgemeng begéinte Verbindungsfehler ass (2003) Kann net mam MySQL Server um 'Server' (10061) konnektéieren, dat heescht datt d'Netzverbindung refuséiert gouf.

Fänkt hei un ze kucken ob et e MySQL-Server um System leeft wéi hei uewen gewisen. Gitt och sécher datt de Server Netzwierkverbindungen aktivéiert huet an datt den Netzwierkport deen Dir benotzt fir ze verbannen deen deen um Server konfiguréiert ass.

Aner allgemeng Feeler déi Dir wahrscheinlech begéint wann Dir probéiert mat dem MySQL Server ze verbannen sinn:

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)

Dës Feeler weisen datt de Server kéint lafen, awer Dir probéiert mat engem TCP/IP Hafen ze verbannen, mam Numm Pipe oder Unix Socket Datei anescht wéi deen op deem de Server lauschtert.

3. Zougang dementéiert Feeler an MySQL

A MySQL ass e Benotzerkont definéiert a punkto engem Benotzernumm an dem Client Host oder Hosten, aus deem de Benotzer mat dem Server ka verbannen. Zousätzlech, e Kont kann och Authentifikatioun Umeldungsinformatioune wéi e Passwuert hunn.

Och wann et vill verschidden Ursaache vu Zougang verweigert Feeler sinn, ass eng vun den heefegsten Ursaachen op d'MySQL Konten, déi de Server erlaabt Client Programmer ze benotzen beim Uschloss. der Datebank.

MySQL erlaabt d'Schafung vu Konten, déi Client Benotzer erlaben mat dem Server ze verbannen an Zougang zu Daten, déi vum Server geréiert ginn. An dëser Hisiicht, wann Dir en Zougang refuséiert Feeler begéint, kontrolléiert ob de Benotzerkont erlaabt ass mat dem Server iwwer de Clientprogramm ze verbannen deen Dir benotzt, a méiglecherweis den Host, aus deem d'Verbindung kënnt.

Dir kënnt gesinn wéi eng Privilegien e bestëmmte Kont huet andeems Dir de Kommando SHOW GRANTS leeft wéi gewisen.

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

Dir kënnt Privilegien un e bestëmmte Benotzer op enger spezifescher Datebank op d'Remote IP Adress ginn andeems Dir déi folgend Kommandoen an der MySQL Shell benotzt.

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

Ausserdeem kënnen Zougang refuséiert Feeler och aus Probleemer mat der Verbindung mat MySQL entstoen, kuckt op déi virdru erkläert Feeler.

4. Verluer Verbindung zu MySQL Server

Dir kënnt dëse Feeler aus engem vun de folgende Grënn begéinen: schlecht Netzwierkverbindung, Verbindungszäit oder e Problem mat BLOB Wäerter déi méi grouss si wéi max_allowed_packet. Am Fall vun engem Netzwierkverbindungsproblem, gitt sécher datt Dir eng gutt Netzwierkverbindung hutt, besonnesch wann Dir Zougang zu engem Remote-Datebankserver hutt.

Wann et e Verbindungs-Timeout-Problem ass, besonnesch wann MySQL probéiert eng initial Verbindung mam Server ze benotzen, erhéicht de Wäert vum connect_timeout-Parameter. Awer am Fall vu BLOB Wäerter déi méi grouss sinn wéi max_allowed_packet, musst Dir e méi héije Wäert fir de max_allowed_packet an Ärer /etc/my.cnf Konfiguratiounsdatei ënner [mysqld] oder [Client] setzen. Sektioun wéi gewisen.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Wann d'MySQL Konfiguratiounsdatei net fir Iech zougänglech ass, da kënnt Dir dëse Wäert mat dem folgenden Kommando an der MySQL Shell setzen.

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

5. Ze vill MySQL Verbindungen

Am Fall wou e MySQL Client de \zevill Verbindungen Feeler begéint, heescht et datt all verfügbare Verbindunge vun anere Cliente benotzt ginn D'Zuel vun de Verbindungen (Standard ass 151) gëtt vum max_connections System kontrolléiert. variabel; Dir kënnt de Problem léisen andeems Dir säi Wäert erhéicht fir méi Verbindungen an Ärer /etc/my.cnf Konfiguratiounsdatei z'erméiglechen.

[mysqld]
max_connections=1000

6. Aus Erënnerung MySQL

Am Fall wou Dir eng Ufro mam MySQL Client Programm benotzt an de Feeler an der Fro begéint, heescht et datt MySQL net genuch Erënnerung huet fir dat ganzt Ufroresultat ze späicheren.

Den éischte Schrëtt ass sécherzestellen datt d'Ufro richteg ass, wann et ass, da maacht déi folgend:

  • wann Dir MySQL Client direkt benotzt, start et mat --schnellschalter, fir cache Resultater auszeschalten oder
  • wann Dir de MyODBC Chauffer benotzt, huet d'Konfiguratioun User Interface (UI) eng fortgeschratt Tab fir Fändelen. Check Net Cache Resultat.

En anert super Tool ass, MySQL Tuner - e nëtzlecht Skript dat mat engem lafende MySQL Server verbënnt a Virschléi gëtt wéi et fir méi héich Leeschtung konfiguréiert ka ginn.

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

Fir MySQL Optimiséierung a Performance Tuning Tipps, liest eisen Artikel: 15 Nëtzlech MySQL/MariaDB Performance Tuning an Optimiséierung Tipps.

7. MySQL hält Crashing

Wann Dir dëse Problem begéint, sollt Dir probéieren erauszefannen ob de Problem ass datt de MySQL Server stierft oder ob et de Client mat engem Problem ass. Bedenkt datt vill Server Crashen duerch korrupte Datedateien oder Indexdateien verursaacht ginn.

Dir kënnt de Serverstatus iwwerpréiwen fir festzestellen wéi laang et op a lafen ass.

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

Alternativ, lafen de folgende mysqladmin Kommando fir Uptime vum MySQL Server ze fannen.

$ sudo mysqladmin version -p 

Aner Léisungen enthalen awer net limitéiert fir de MySQL Server ze stoppen an Debugging z'erméiglechen, da fänkt de Service erëm un. Dir kënnt probéieren en Testfall ze maachen dee benotzt ka ginn fir de Problem ze widderhuelen. Zousätzlech, öffnen eng zousätzlech Terminalfenster a lafen de folgende Kommando fir MySQL Prozessstatistiken ze weisen, während Dir Är aner Ufroen ausféiert:

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

Och wa mir e puer allgemeng MySQL Probleemer a Feeler gekuckt hunn an och Weeër geliwwert hunn fir se ze léisen an ze léisen, ass déi wichtegst Saach mat der Diagnostik vun engem Feeler ze verstoen wat et heescht (a punkto wat et verursaacht).

Also wéi kënnt Dir dëst bestëmmen? Déi folgend Punkte wäerten Iech guidéieren wéi Dir feststellt wat genau e Problem verursaacht:

  1. Den éischten a wichtegste Schrëtt ass d'MySQL Logbicher ze kucken, déi am Verzeechnes /var/log/mysql/ gespäichert sinn. Dir kënnt Kommandozeil-Utilities wéi Schwanz benotze fir duerch d'Logdateien ze liesen.
  2. Wann de MySQL Service net ufänkt ze starten, kontrolléiert säi Status mat systemctl oder benotzt de journetctl (mat dem -xe Fändel) Kommando ënner systemd fir de Problem z'ënnersichen.
  3. Dir kënnt och Systemlogdatei wéi /var/log/messages oder ähnlech aus Grënn fir Äre Problem ënnersichen.
  4. Probéiert Tools wéi htop ze benotzen fir z'iwwerpréiwen wéi ee Programm all CPU hëlt oder d'Maschinn gespaart ass oder fir z'iwwerpréiwen ob Dir keng Erënnerung, Disk Space, Dateidescriptoren oder eng aner wichteg Ressource hutt.
  5. Ugeholl datt de Problem e Fluchprozess ass, kënnt Dir ëmmer probéieren et ëmzebréngen (mat dem Pkill oder Kill Utility) sou datt MySQL normalerweis funktionnéiert.
  6. Ugeholl datt de mysqld-Server Problemer mécht, kënnt Dir de Kommando ausféieren: mysqladmin -u root ping oder mysqladmin -u root processlist fir eng Äntwert dovunner ze kréien.
  7. Wann de Problem mat Ärem Clientprogramm ass wärend Dir probéiert mam MySQL Server ze verbannen, kontrolléiert firwat et net gutt funktionnéiert, probéiert all Ausgang dovun ze kréien fir Probleemer ze léisen.

Dir kënnt och gär dës folgend MySQL-relatéiert Artikelen liesen:

  1. Léiert MySQL/MariaDB fir Ufänger - Deel 1
  2. Wéi iwwerwaacht ech MySQL/MariaDB Datenbanken mat Netdata op CentOS 7
  3. Wéi all MySQL Datenbanken vun alen op neie Server transferéieren
  4. Mytop - E Nëtzlech Tool fir d'Iwwerwaachung vu MySQL/MariaDB Performance am Linux
  5. 12 MySQL/MariaDB Sécherheet Best Practices fir Linux

Fir méi Informatioun, konsultéiert d'MySQL Referenzhandbuch betreffend Probleemer a gemeinsame Feeler, et lëscht allgemeng Probleemer a Fehlermeldungen op déi Dir begéine kënnt wann Dir MySQL benotzt, inklusiv déi, déi mir uewen diskutéiert hunn a méi.