Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz skrypt bash monitorujący zapytania MySQL

W tym artykule omówimy, jak skonfigurować prosty skrypt basha, aby sprawdzał aktywność zapytań MySQL, aby upewnić się, że długie zapytania nie zawieszają się na serwerze. Ten skrypt będzie również w stanie wysłać wiadomość e-mail z powiadomieniem o napotkaniu długiego zapytania.

W większości przypadków zapytanie do bazy danych MySQL powinno być w stanie wykonać w ciągu kilku sekund, jeśli z jakiegoś powodu trwa to dłużej, może istnieć możliwość, że długo działające zapytanie MySQL tworzy kopię zapasową tej kolejki bazy danych i prowadzi do spowolnienia serwera i prawdopodobnie stanie się niestabilny.

Aby uzyskać więcej informacji na temat typów problemów z używaniem MySQL, możesz przeczytać o nadmiernej aktywności MySQL.

Ten skrypt można skonfigurować tylko na planie hostingu VPS lub serwera dedykowanego, do którego masz dostęp jako root.

Utwórz skrypt do monitorowania zapytań MySQL

  1. W zależności od złożoności bazy danych, liczby uruchomionych witryn i natężenia ruchu, maksymalny czas, przez który zapytanie może zostać uruchomione, może być inny. Polecam zacząć od czegoś konserwatywnego około 120 sekund lub 2 minut, a jeśli logujesz się na serwer po otrzymaniu alertu i wydaje się, że nadal działa stabilnie, prawdopodobnie możesz zwiększyć poziom wyzwalania do czegoś wyższego.Rozpocznij edycję nowy plik dla skryptu alertów zapytań MySQL bash, w tym przypadku będę używał vima edytor tekstu i utworzenie nowego pliku o nazwie MySQLMon w katalogu domowym mojego użytkownika za pomocą następującego polecenia:vim /home/userna1/MySQLMon Wtedy będziesz chciał nacisnąć i aby wprowadzić Wstaw tryb po załadowaniu vima i wprowadź następujący kod:
    #!/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

    Ten kod może na początku wyglądać trochę przytłaczająco, ale w rozbiciu jest naprawdę dość prosty. Najpierw deklarujemy wyzwalacz zmienna i ustawiając ją na 120 sekundy. Następnie ustawiamy activeQcount zmienna do przechowywania zapytań, które są dłuższe niż nasz wyzwalacz wartość.

    Następnie używamy bash jeśli oświadczenie, aby sprawdzić, czy nasz activeQcount wartość jest powyżej zera, co pokazuje, że zapytania działają dłużej niż nasz ustawiony wyzwalacz wartość. Następnie po prostu zaczynamy echo tekst do pliku zastępczego o nazwie /tmp/MySQLMon , a potem w końcu kocie ten plik zastępczy, który po prostu odczytuje go, a następnie przesyłamy go potoku | do poczty funkcja, po której następuje temat, którego chcemy użyć, adres odbiorcy, a następnie możesz wpisać — -r a następnie adres e-mail, z którego ma pochodzić wiadomość.

  2. Kiedy otrzymasz powiadomienie e-mail, będzie to wyglądać podobnie do tego przykładu:

    ======================================================================================
    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)
    =====================================================================================

Skonfiguruj zadanie cron do uruchamiania skryptu MySQLMon

  1. Teraz powinieneś mieć skonfigurowany skrypt bash monitorujący zapytania MySQL, następnie będziesz chciał utworzyć zadanie cron, aby uruchomić to zadanie. Jeśli nie jesteś zaznajomiony z zadaniami crona, możesz przeczytać o tym, jak uruchomić zadanie crona. Możesz użyć listy rozwijanej cPanel co 5 minut, co powinno sprawić, że ostateczne zadanie crona będzie wyglądać tak:*/5 * * * * bash /home/userna1/MySQLMon

Powinieneś teraz pomyślnie skonfigurować skrypt bash do monitorowania zapytań MySQL, aby wyłapywać te, które trwają długo, i ostrzegać Cię przez e-mail, gdy przechwyci jakiekolwiek. Powinieneś także wiedzieć, jak skonfigurować zadanie cron, aby uruchamiał ten skrypt w określonych odstępach czasu, aby stale działał bez dalszej ręcznej interwencji z Twojej strony.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL powiedział:Dokumentacja #1045 — Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:NIE)

  2. 15 przydatnych wskazówek dotyczących dostrajania i optymalizacji wydajności MySQL/MariaDB

  3. Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL - Część 6

  4. Jak mogę zmienić domyślny limit czasu połączenia Mysql podczas łączenia się przez Pythona?

  5. Wyjątek Java JDBC MySQL:operacja niedozwolona po zamknięciu zestawu wyników