MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Kroki, które należy podjąć w przypadku awarii MySQL

Przerwa w działaniu MySQL oznacza po prostu, że Twoja usługa MySQL jest niedostępna lub nie odpowiada z perspektywy drugiej strony. Przestoje mogą być spowodowane wieloma możliwymi przyczynami.

  • Problem z siecią — problem z łącznością, przełącznik, routing, przelicznik, warstwa równoważenia obciążenia.
  • Problem z zasobami — czy osiągnąłeś limit zasobów czy wąskie gardło.
  • Błędna konfiguracja — Złe uprawnienia lub własność, nieznana zmienna, złe hasło, zmiana uprawnień.
  • Blokowanie - Globalna blokada lub blokada tabeli uniemożliwia innym dostęp do danych.

W tym poście na blogu przyjrzymy się kilku krokom, które należy podjąć w przypadku awarii MySQL (środowisko Linux).

Krok pierwszy:pobierz kod błędu

Gdy wystąpi awaria, aplikacja wyrzuci pewne błędy i wyjątki. Błędy te często zawierają kod błędu, który daje przybliżony obraz tego, z czym masz do czynienia i co zrobić, aby rozwiązać problem i odzyskać awarię.

Aby uzyskać więcej informacji na temat błędu, sprawdź odpowiednio strony Kod błędu MySQL lub Kod błędu MariaDB, aby dowiedzieć się, co oznacza błąd.

Krok drugi:Czy serwer MySQL działa?

Zaloguj się do serwera przez terminal i sprawdź, czy demon MySQL działa i nasłuchuje na poprawnym porcie. W Linuksie można wykonać następujące czynności:

Najpierw sprawdź proces MySQL:

$ ps -ef | grep -i mysql

Powinieneś dostać coś w zamian. W przeciwnym razie MySQL nie działa. Jeśli MySQL nie działa, spróbuj go uruchomić:

$ systemctl start mysql # systemd

$ service mysql start # sysvinit/upstart

$ mysqld_safe # manual

Jeśli widzisz błąd w powyższym kroku, powinieneś zajrzeć do dziennika błędów MySQL, który różni się w zależności od systemu operacyjnego i konfiguracji zmiennych MySQL dla log_error w pliku konfiguracyjnym MySQL. W przypadku serwera opartego na RedHat plik zwykle znajduje się pod adresem:

$ cat /var/log/mysqld.log

Zwróć uwagę na najnowsze wiersze z poziomem dziennika „[Błąd]”. Niektóre wiersze oznaczone „[Ostrzeżenie]” mogą wskazywać na pewne problemy, ale są one dość rzadkie. W większości przypadków błędną konfigurację i problemy z zasobami można wykryć tutaj.

Jeśli MySQL działa, sprawdź, czy nasłuchuje na właściwym porcie:

$ netstat -tulpn | grep -i mysql

tcp6       0 0 :::3306                 :::* LISTEN   1089/mysqld

Otrzymasz nazwę procesu "mysqld", nasłuchującego na wszystkich interfejsach (:::3306 lub 0.0.0.0:3306) na porcie 3306 z PID 1089 i stanem "LISTEN". Jeśli widzisz powyższy wiersz pokazuje 127.0.0.1:3306, MySQL nasłuchuje tylko lokalnie. Być może będziesz musiał zmienić wartość bind_address w pliku konfiguracyjnym MySQL, aby nasłuchiwać wszystkich adresów IP, lub po prostu skomentować wiersz.

Krok trzeci:Sprawdź problemy z łącznością

Jeśli serwer MySQL działa poprawnie bez błędów w dzienniku błędów MySQL, prawdopodobieństwo wystąpienia problemów z łącznością jest dość wysokie. Zacznij od sprawdzenia łączności z hostem przez ping (jeśli włączony jest ICMP) i telnet z serwerem MySQL z serwera aplikacji:

(application-server)$ ping db1.mydomain.com

(application-server)$ telnet db1.mydomain.com 3306

Trying db1.mydomain.com...

Connected to 192.168.0.16.

Escape character is '^]'.

O

5.6.46-86.2sN&nz9NZ�32?&>H,EV`_;mysql_native_password

Powinieneś zobaczyć kilka linii na wyjściu telnetu, jeśli możesz połączyć się z portem MySQL. Teraz spróbuj jeszcze raz, używając klienta MySQL z serwera aplikacji:

(application-server)$ mysql -u db_user -p -h db1.mydomain.com -P3306

ERROR 1045 (28000): Access denied for user 'db_user'@'db1.mydomain.com' (using password: YES)

W powyższym przykładzie błąd daje nam trochę informacji o tym, co robić dalej. Powyższe prawdopodobnie dlatego, że ktoś zmienił hasło dla "db_user" lub hasło dla tego użytkownika wygasło. Jest to raczej normalne zachowanie z MySQL 5.7. 4 i wyżej, gdzie polityka automatycznego wygasania haseł jest domyślnie włączona z progiem 360 dni - co oznacza, że ​​wszystkie hasła wygasają raz w roku.

Krok czwarty:Sprawdź listę procesów MySQL

Jeśli MySQL działa poprawnie bez problemów z łącznością, sprawdź listę procesów MySQL, aby zobaczyć, jakie procesy są aktualnie uruchomione:

mysql> SHOW FULL PROCESSLIST;

+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+

| Id  | User | Host      | db | Command | Time | State | Info                  | Rows_sent | Rows_examined |

+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+

| 117 | root | localhost | NULL | Query   | 0 | init | SHOW FULL PROCESSLIST |       0 | 0 |

+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+

1 row in set (0.01 sec)

Zwróć uwagę na kolumnę Informacje i czas. Niektóre operacje MySQL mogą być na tyle destrukcyjne, że baza danych zatrzymuje się i przestaje odpowiadać. Następujące instrukcje SQL, jeśli są uruchomione, mogą zablokować innym dostęp do bazy danych lub tabeli (co może spowodować krótką awarię usługi MySQL z perspektywy aplikacji):

  • STOŁY DO PŁUKANIA Z BLOKADĄ ODCZYTU
  • ZABLOKUJ TABELĘ ...
  • ZMIEŃ TABELĘ ...

Niektóre długotrwałe transakcje mogą również opóźnić działanie innych, co ostatecznie spowoduje przekroczenie limitu czasu dla innych transakcji oczekujących na dostęp do tych samych zasobów. Możesz albo zabić obraźliwą transakcję, aby umożliwić innym dostęp do tych samych wierszy, albo ponowić transakcję w kolejce po zakończeniu długiej transakcji.

Wnioski

Proaktywne monitorowanie jest bardzo ważne, aby zminimalizować ryzyko awarii MySQL. Jeśli Twoja baza danych jest zarządzana przez ClusterControl, wszystkie wymienione aspekty są monitorowane automatycznie bez dodatkowej konfiguracji ze strony użytkownika. Będziesz otrzymywać alarmy w swojej skrzynce odbiorczej dotyczące wykrycia anomalii, takich jak długotrwałe zapytania, błędna konfiguracja serwera, przekroczenie progu zasobów i wiele innych. Ponadto ClusterControl automatycznie spróbuje odzyskać usługę bazy danych, jeśli coś pójdzie nie tak z hostem lub siecią.

Możesz również dowiedzieć się więcej o MySQL i MariaDB Disaster Recovery, czytając naszą białą księgę.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacje zapisu dla Qualcomm Centriq 2400 w wersji kandydata wersji MariaDB 10.3.5

  2. 4 sposoby na sortowanie bazy danych w MariaDB

  3. Czym są tabele czasowe MariaDB?

  4. MariaDB JSON_VALID() Objaśnienie

  5. Jak działa SLEEP() w MariaDB