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:
- 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. - 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. - Megvizsgálhatja a rendszernaplófájlt is, például a
/var/log/messages
vagy hasonlót a probléma okaiért. - 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. .
- 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.
- Tételezzük fel, hogy a mysqld szerver okoz problémát, akkor futtassa a következő parancsot:
mysqladmin -u root ping
vagymysqladmin -u root processlist
, hogy bármilyen választ tőle. - 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:
- Tanuld meg a MySQL/MariaDB kezdőknek – 1. rész
- A MySQL/MariaDB adatbázisok figyelése Netdata használatával a CentOS 7 rendszeren
- Az összes MySQL adatbázis átvitele a régi szerverről az új szerverre
- Mytop – Hasznos eszköz a MySQL/MariaDB teljesítményének nyomon követésére Linux alatt
- 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.