Weboldal keresés

Hasznos tippek a MySQL gyakori hibáinak elhárításához


A MySQL egy széles körben használt nyílt forráskódú relációs adatbázis-kezelő rendszer (RDMS), amely az Oracle tulajdonában van. Az évek során ez volt az alapértelmezett választás a webalapú alkalmazásokhoz, és továbbra is népszerű más adatbázismotorokhoz képest.

Olvassa el még: A legújabb MySQL telepítése RHEL/CentOS és Fedora rendszeren

A MySQL-t webes alkalmazásokhoz tervezték és optimalizálták – szerves részét képezi az olyan nagy webalapú alkalmazásoknak, mint a Facebook, Twitter, Wikipédia, YouTube és sok más.

Webhelyét vagy webalkalmazását a MySQL hajtja? Ebben a részletes cikkben elmagyarázzuk, hogyan lehet megoldani a problémákat és a gyakori hibákat a MySQL adatbázis-kiszolgálóval. Leírjuk, hogyan lehet meghatározni a problémák okait, és mit kell tenni a megoldásuk érdekében.

1. Nem tud csatlakozni a helyi MySQL szerverhez

Az egyik gyakori kliens-kiszolgáló kapcsolati hiba a MySQL-ben: „ERROR 2002 (HY000): Nem lehet csatlakozni a helyi MySQL-kiszolgálóhoz a '/var/run/mysqld/mysqld.sock' (2) aljzaton keresztül. > ".

Ez a hiba azt jelzi, hogy nem fut a MySQL szerver (mysqld) a gazdagépen, vagy rossz Unix socket fájlnevet vagy TCP/IP< fájlnevet adott meg. portot, amikor megpróbál csatlakozni a szerverhez.

Győződjön meg arról, hogy a kiszolgáló fut-e, és ellenőrizze a mysqld nevű folyamatot az adatbázis-kiszolgáló gazdagépén a ps parancs és a grep paranccsal együtt, az ábra szerint.

ps xa | grep mysqld | grep -v mysqld

Ha a fenti parancsok nem mutatnak kimenetet, akkor az adatbázis-kiszolgáló nem fut. Ezért az ügyfél nem tud csatlakozni hozzá. A kiszolgáló elindításához futtassa a következő systemctl parancsot.

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

A MySQL szolgáltatás állapotának ellenőrzéséhez használja a következő parancsot.

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

A fenti parancs kimenetéből a MySQL szolgáltatás meghiúsult. Ilyen esetben megpróbálhatja újraindítani és még egyszer ellenőrizni az állapotát.

sudo systemctl restart mysql
sudo systemctl status mysql

Ezenkívül, ha a szerver a következő parancsnak megfelelően fut, de továbbra is a fenti hibaüzenetet látja, akkor azt is ellenőrizze, hogy a TCP/IP portot egy tűzfal vagy bármely portblokkoló szolgáltatás blokkolta-e. .

ps xa | grep mysqld | grep -v mysqld

A kiszolgáló által hallgatott port megtalálásához használja a netstat parancsot az ábrán látható módon.

sudo netstat -tlpn | grep "mysql"

2. Nem tud csatlakozni a MySQL Serverhez

Egy másik gyakran előforduló kapcsolódási hiba a következő: „(2003) Nem lehet csatlakozni a MySQL szerverhez a ’szerveren” (10061) ), ami azt jelenti, hogy a hálózati kapcsolat megtagadva.

Itt kezdje azzal, hogy ellenőrizze, hogy fut-e MySQL szerver a rendszeren, ahogy fent látható. Győződjön meg arról is, hogy a kiszolgálón engedélyezve vannak a hálózati kapcsolatok, és hogy a csatlakozáshoz használt hálózati port a szerveren konfigurált-e.

További gyakori hibák, amelyekkel valószínűleg találkozhat, amikor megpróbál csatlakozni a MySQL szerverhez:

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)

Ezek a hibák azt jelzik, hogy a kiszolgáló futhat, Ön azonban egy TCP/IP-porton, nevű pipe-n vagy Unix socket-fájlon keresztül próbál csatlakozni, amely különbözik attól, amelyen a szerver figyel.

3. Hozzáférés megtagadott hibák a MySQL-ben

A MySQL-ben a felhasználói fiókot a felhasználónév és az ügyfélgazdagép vagy gazdagépek határozzák meg, amelyekről a felhasználó csatlakozhat a szerverhez. Ezenkívül egy fiókhoz hitelesítési hitelesítési adatok is tartozhatnak, például jelszó.

Bár a „Hozzáférés megtagadva” hibáknak számos különböző oka van, az egyik gyakori ok azokkal a MySQL-fiókokkal kapcsolatos, amelyeket a szerver engedélyez az ügyfélprogramoknak a csatlakozáskor. Azt jelzi, hogy a kapcsolatban megadott felhasználónév nem rendelkezik jogosultságokkal az adatbázis eléréséhez.

A MySQL lehetővé teszi olyan fiókok létrehozását, amelyek lehetővé teszik az ügyfélfelhasználók számára, hogy csatlakozzanak a szerverhez, és hozzáférjenek a szerver által kezelt adatokhoz. Ezzel kapcsolatban, ha hozzáférés megtagadva hibaüzenetet észlel, ellenőrizze, hogy a felhasználói fiók csatlakozhat-e a szerverhez az Ön által használt kliensprogramon keresztül, és esetleg azon a gazdagépen keresztül, amelyről a kapcsolat jön. .

A képen látható SHOW GRANTS parancs futtatásával megtekintheti, hogy egy adott fiók milyen jogosultságokkal rendelkezik.

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

A MySQL shell következő parancsaival jogosultságokat adhat egy adott adatbázisban lévő felhasználónak a távoli IP-címhez.

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

Továbbá a Hozzáférés megtagadva hibák a MySQL-hez való kapcsolódási problémákból is származhatnak, lásd a korábban kifejtett hibákat.

4. Megszakadt a kapcsolat a MySQL Serverrel

Ez a hiba a következő okok egyike miatt fordulhat elő: rossz hálózati kapcsolat, kapcsolat időtúllépése vagy probléma a BLOB értékekkel, amelyek nagyobbak, mint max_allowed_packet. Hálózati kapcsolati probléma esetén ügyeljen a jó hálózati kapcsolatra, különösen akkor, ha távoli adatbázis-kiszolgálóhoz fér hozzá.

Ha kapcsolati időtúllépés probléma, különösen amikor a MySQL kezdeti kapcsolatot próbál használni a szerverrel, növelje a connect_timeout paraméter értékét. . Ha azonban a BLOB-értékek nagyobbak, mint a max_allowed_packet, magasabb értéket kell beállítania a max_allowed_packet számára a /etc. /my.cnf konfigurációs fájlt a [mysqld] vagy a [kliens] szakaszban, az ábra szerint.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ha a MySQL konfigurációs fájl nem érhető el az Ön számára, akkor ezt az értéket a következő paranccsal állíthatja be a MySQL-héjban.

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

5. Túl sok MySQL-kapcsolat

Ha egy MySQL-ügyfél a „túl sok kapcsolat” hibával találkozik, az azt jelenti, hogy az összes elérhető kapcsolatot más kliensek is használják. A kapcsolatok számát (alapértelmezett: 151) a max_connections rendszerváltozó szabályozza; a problémát úgy orvosolhatja, hogy növeli az értékét, hogy több kapcsolat legyen elérhető az /etc/my.cnf konfigurációs fájlban.

[mysqld]
max_connections=1000

6. Elfogyott a MySQL memória

Ha a lekérdezést a MySQL kliensprogrammal futtatja, és a kérdéses hibával találkozik, az azt jelenti, hogy a MySQL-nek nincs elegendő memóriája a teljes lekérdezés eredményének tárolására.

Az első lépés annak biztosítása, hogy a lekérdezés helyes-e, ha igen, akkor tegye a következőket:

  • ha közvetlenül a MySQL klienst használja, indítsa el a ---quick switch paranccsal, hogy letiltja a gyorsítótárazott eredményeket vagy
  • ha a MyODBC illesztőprogramot használja, a konfigurációs felhasználói felület (UI) rendelkezik egy speciális lappal a zászlókhoz. Jelölje be a „Ne gyorsítótárazza az eredményt” lehetőséget.

Egy másik nagyszerű eszköz a MySQL Tuner – egy hasznos szkript, amely csatlakozik egy futó MySQL-kiszolgálóhoz, és javaslatokat ad arra vonatkozóan, hogyan konfigurálható a nagyobb teljesítmény érdekében.

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

A MySQL optimalizálási és teljesítménytuningolási tippekért olvassa el cikkünket: 15 hasznos MySQL/MariaDB teljesítményhangolási és -optimalizálási tipp.

7. A MySQL folyamatosan összeomlik

Ha ezzel a problémával találkozik, próbálja meg kideríteni, hogy a probléma az, hogy a MySQL szerver meghalt, vagy az ügyfél a problémás. Vegye figyelembe, hogy sok szerver összeomlást sérült adatfájlok vagy indexfájlok okoznak.

Ellenőrizheti a kiszolgáló állapotát, hogy megállapítsa, mennyi ideje működik és működik.

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

Alternatív megoldásként futtassa a következő mysqladmin parancsot a MySQL-kiszolgáló üzemidejének megállapításához.

sudo mysqladmin version -p 

Egyéb megoldások közé tartozik, de nem kizárólagosan, a MySQL szerver leállítása és a hibakeresés engedélyezése, majd a szolgáltatás újraindítása. Megpróbálhat tesztesetet készíteni, amellyel megismételheti a problémát. Ezenkívül nyisson meg egy további terminálablakot, és futtassa a következő parancsot a MySQL folyamatstatisztikák megjelenítéséhez, miközben más lekérdezéseit futtatja:

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

A lényeg: annak meghatározása, hogy mi okozza a problémát vagy a hibát

Bár megvizsgáltunk néhány gyakori MySQL-problémát és hibát, valamint módokat kínáltunk a hibaelhárításra és megoldásukra, a hiba diagnosztizálása során a legfontosabb az, hogy megértsük, mit jelent a hiba (az okot illetően). .

Szóval hogyan lehet ezt meghatározni? A következő pontok segítenek megbizonyosodni arról, hogy pontosan mi okozza a problémát:

  1. Az első és legfontosabb lépés a MySQL naplók megtekintése, amelyek a /var/log/mysql/ könyvtárban vannak tárolva. A naplófájlok olvasásához használhat parancssori segédprogramokat, például a tail-t.
  2. Ha a MySQL szolgáltatás nem indul el, ellenőrizze annak állapotát a systemctl használatával, vagy használja a journetctl parancsot (a -xe jelzővel) a systemd alatt a probléma vizsgálatához.
  3. Megvizsgálhatja a rendszernaplófájlt is, például a /var/log/messages vagy hasonlót a probléma okaiért.
  4. Próbáljon meg olyan eszközöket használni, mint a Mytop, a glances, a top, a ps vagy a htop, hogy ellenőrizze, melyik program veszi az összes CPU-t, vagy zárolja a gépet, vagy ellenőrizze, hogy nem fogy-e a memória, a lemezterület, a fájlleírók vagy más fontos erőforrás. .
  5. Feltételezve, hogy a probléma valamilyen elszabadult folyamat, mindig megpróbálhatja megölni (a pkill vagy kill segédprogram használatával), hogy a MySQL megfelelően működjön.
  6. Tételezzük fel, hogy a mysqld szerver okoz problémát, akkor futtassa a következő parancsot: mysqladmin -u root ping vagy mysqladmin -u root processlist, hogy bármilyen választ tőle.
  7. Ha a probléma az ügyfélprogrammal van, miközben megpróbál csatlakozni a MySQL-kiszolgálóhoz, ellenőrizze, hogy miért nem működik megfelelően, és próbáljon meg bármilyen kimenetet lekérni belőle hibaelhárítási célból.

Érdemes elolvasni a következő MySQL-lel kapcsolatos cikkeket is:

  1. Tanuld meg a MySQL/MariaDB kezdőknek – 1. rész
  2. A MySQL/MariaDB adatbázisok figyelése Netdata használatával a CentOS 7 rendszeren
  3. Az összes MySQL adatbázis átvitele a régi szerverről az új szerverre
  4. Mytop – Hasznos eszköz a MySQL/MariaDB teljesítményének nyomon követésére Linux alatt
  5. 12 MySQL/MariaDB biztonsági bevált gyakorlatok Linuxhoz

További információkért olvassa el a MySQL Reference kézikönyvet a problémákról és gyakori hibákról, amely átfogóan felsorolja azokat a gyakori problémákat és hibaüzeneteket, amelyekkel a MySQL használata során találkozhat, beleértve azokat is, amelyeket fent tárgyaltunk.