V tomto článku budeme diskutovat o tom, jak můžete nakonfigurovat jednoduchý bash skript pro kontrolu aktivity dotazů MySQL, abyste zajistili, že na vašem serveru nebudou viset dlouhé dotazy. Tento skript vám také bude schopen poslat e-mail s upozorněním, když narazí na dlouho běžící dotaz.
Ve většině případů by měl být databázový dotaz MySQL schopen vykonat během několika sekund, pokud to z nějakého důvodu trvá déle, může existovat možnost, že dlouho běžící dotaz MySQL zálohuje tuto databázovou frontu a vede ke zpomalení vašeho serveru. a může se stát nestabilní.
Pro více informací o typech problémů s používáním MySQL si můžete přečíst o nadměrné aktivitě MySQL.
Tento skript lze nastavit pouze na plánu hostování VPS nebo dedikovaného serveru, ke kterému máte přístup root.
Vytvořte skript monitorování dotazů MySQL
- V závislosti na složitosti vaší databáze, počtu webových stránek, které provozujete, a návštěvnosti, se může maximální doba, po kterou chcete dotazu spustit, lišit. Doporučil bych začít s něčím konzervativním kolem 120 sekund nebo 2 minut, a pokud se po upozornění přihlašujete ke svému serveru a zdá se, že stále běží stabilně, pravděpodobně byste mohli zvýšit úroveň spouštění na něco vyššího. Začněte upravovat nový soubor pro skript výstrahy dotazů bash MySQL, v tomto případě použiji vim textový editor a vytvoření nového souboru s názvem MySQLMon v domovském adresáři mého uživatele pomocí následujícího příkazu:
vim /home/userna1/MySQLMon
Pak budete chtít stisknout i zadejte Vložit režim po načtení vim a zadejte následující kód:
#!/bin/bash trigger=120 activeQcount=`mysql -e "show full processlist;" |
egrep -v "leechprotect|root|Time" | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
wc -l` if [ $activeQcount -gt 0 ] then echo
"=====================================================================================" >
/tmp/MySQLMon echo "= MySQLMon has found a new query running for longer than 120 seconds (2 mins)"
>> /tmp/MySQLMon echo
"=====================================================================================" >>
/tmp/MySQLMon date >> /tmp/MySQLMon echo "" >> /tmp/MySQLMon mysql -e "show full processlist;"
>> /tmp/MySQLMon echo
"=====================================================================================">>
/tmp/MySQLMon cat /tmp/MySQLMon | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
mail -s"Caught query running longer than $trigger seconds" [email protected] -- -r
"[email protected]" fi
Tento kód může zpočátku vypadat trochu ohromující, ale rozebrán je opravdu docela jednoduchý. Nejprve vyhlašujeme spouštěč proměnnou a nastavte ji na 120 sekundy. Poté nastavíme activeQcount proměnná, aby v podstatě podržela všechny dotazy, které jsou delší než náš spouštěč hodnotu.Potom použijeme bash if výpis, abyste zkontrolovali, zda je náš activeQcount hodnota je nad nulou, což ukazuje, že dotazy běží déle, než je náš nastavený spouštěč hodnota. Dále jednoduše začneme echoing text do zástupného souboru s názvem /tmp/MySQLMon , pak konečně kočka ten zástupný soubor, který ho jen přečte a pak jej převedeme do kanálu | na poštu funkci následovanou předmětem, který bychom chtěli použít, adresou příjemce, poté můžete zadat — -r následovanou e-mailovou adresou, ze které chcete zprávu odeslat.
- Když obdržíte e-mailové upozornění, bude vypadat podobně jako tento příklad:
======================================================================================
MySQLMon has found a new query running for longer than 120 seconds (2 mins)
=====================================================================================
Tue Dec 4 15:07:42 EST 2012 40901 userna1_phpb1 localhost userna1_phpb1 Query 342
Sending data
INSERT INTO users (userID, name, base64_decode)
=====================================================================================
Nastavení úlohy cron pro spuštění skriptu MySQLMon
- Nyní byste měli mít nastaven skript bash pro monitorování dotazů MySQL. Dále budete chtít vytvořit úlohu cron pro spuštění této úlohy. Pokud nejste obeznámeni s úlohami cron, můžete si přečíst o tom, jak spustit úlohu cron. Rozbalovací nabídku cPanel můžete použít každých 5 minut, takže konečná úloha cron by měla vypadat takto:
*/5 * * * * bash /home/userna1/MySQLMon
Nyní byste měli mít úspěšně nastaven bash skript, který bude monitorovat vaše dotazy MySQL, aby zachytil všechny dlouho běžící dotazy a aby vás upozornil e-mailem, když nějaké zachytí. Měli byste také vědět, jak nastavit úlohu cron pro spouštění tohoto skriptu v nastaveném intervalu, aby se neustále spouštěl bez dalšího vašeho ručního zásahu.