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

Przydatne wskazówki dotyczące rozwiązywania typowych błędów w MySQL

MySQL jest szeroko stosowanym systemem zarządzania relacyjnymi bazami danych typu open source (RDMS ) należące do Oracle . Przez lata był domyślnym wyborem dla aplikacji internetowych i nadal pozostaje popularny w porównaniu z innymi silnikami baz danych.

MySQL został zaprojektowany i zoptymalizowany pod kątem aplikacji internetowych – stanowi integralną część głównych aplikacji internetowych, takich jak Facebook , Twitter , Wikipedia , YouTube i wiele innych.

Czy Twoja witryna lub aplikacja internetowa jest obsługiwana przez MySQL? ? W tym szczegółowym artykule wyjaśnimy, jak rozwiązywać problemy i typowe błędy w MySQL Serwer bazy danych. Opiszemy, jak określić przyczyny problemów i co zrobić, aby je rozwiązać.

1. Nie można połączyć się z lokalnym serwerem MySQL

Jednym z typowych błędów połączenia klienta z serwerem w MySQL jest „BŁĄD 2002 (HY000):Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/run/mysqld/mysqld.sock' (2) ”.

Ten błąd wskazuje, że nie ma MySQL serwer (mysqld) działa w systemie hosta lub podałeś nieprawidłową nazwę pliku gniazda uniksowego lub TCP/IP port podczas próby połączenia z serwerem.

Upewnij się, że serwer działa, sprawdzając proces o nazwie mysqld na hoście serwera bazy danych, używając jednocześnie poleceń ps i grep, jak pokazano.

$ ps xa | grep mysqld | grep -v mysqld

Jeśli powyższe polecenia nie pokazują żadnych danych wyjściowych, oznacza to, że serwer bazy danych nie działa. Dlatego klient nie może się z nim połączyć. Aby uruchomić serwer, uruchom następujące polecenie systemctl.

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

Aby zweryfikować MySQL stan usługi, użyj następującego polecenia.

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

Z danych wyjściowych powyższego polecenia MySQL usługa nie powiodła się. W takim przypadku możesz spróbować go zrestartować i jeszcze raz sprawdzić jego stan.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Ponadto, jeśli serwer działa, jak pokazano w poniższym poleceniu, ale nadal widzisz powyższy błąd, powinieneś również sprawdzić, czy TCP/IP port jest blokowany przez zaporę sieciową lub dowolną usługę blokowania portów.

$ ps xa | grep mysqld | grep -v mysqld

Aby znaleźć port, na którym nasłuchuje serwer, użyj polecenia netstat, jak pokazano.

$ sudo netstat -tlpn | grep "mysql"

2. Nie można połączyć się z serwerem MySQL

Innym często spotykanym błędem połączenia jest „(2003) Nie można połączyć się z serwerem MySQL na„serwerze” (10061) ”, co oznacza, że ​​połączenie sieciowe zostało odrzucone.

Tutaj zacznij od sprawdzenia, czy istnieje MySQL serwer działa w systemie, jak pokazano powyżej. Upewnij się również, że serwer ma włączone połączenia sieciowe i że port sieciowy, którego używasz do połączenia, jest tym, który został skonfigurowany na serwerze.

Inne typowe błędy, które możesz napotkać podczas próby połączenia z serwerem MySQL to:

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)

Te błędy wskazują, że serwer może być uruchomiony, jednak próbujesz połączyć się za pomocą TCP/IP port, nazwany potok lub plik gniazda uniksowego inny niż ten, na którym nasłuchuje serwer.

3. Błędy odmowy dostępu w MySQL

W MySQL , konto użytkownika jest definiowane za pomocą nazwy użytkownika oraz host lub hosty klienta, z których użytkownik może połączyć się z serwerem. Ponadto konto może mieć również dane uwierzytelniające, takie jak hasło.

Chociaż istnieje wiele różnych przyczyn „Odmowa dostępu ” błędy, jedna z najczęstszych przyczyn jest związana z kontami MySQL, których serwer zezwala na używanie programów klienckich podczas łączenia. Wskazuje, że nazwa użytkownika określony w połączeniu nie ma uprawnień dostępu do bazy danych.

MySQL umożliwia tworzenie kont, które umożliwiają użytkownikom klienta łączenie się z serwerem i dostęp do danych zarządzanych przez serwer. W związku z tym, jeśli napotkasz błąd odmowy dostępu , sprawdź, czy konto użytkownika może łączyć się z serwerem za pośrednictwem programu klienckiego, którego używasz, i prawdopodobnie hosta, z którego pochodzi połączenie.

Możesz zobaczyć, jakie uprawnienia ma dane konto, uruchamiając SHOW GRANTS polecenie, jak pokazano.

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

Możesz przyznać uprawnienia określonemu użytkownikowi w określonej bazie danych do zdalnego adresu IP za pomocą następujących poleceń w powłoce MySQL.

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

Ponadto błędy odmowy dostępu może również wynikać z problemów z połączeniem z MySQL, zapoznaj się z wcześniej wyjaśnionymi błędami.

4. Utracono połączenie z serwerem MySQL

Możesz napotkać ten błąd z jednego z następujących powodów:słaba łączność sieciowa , limit czasu połączenia lub problem z BLOB wartości większe niż max_allowed_packet . W przypadku problemu z połączeniem sieciowym upewnij się, że masz dobre połączenie sieciowe, zwłaszcza jeśli korzystasz ze zdalnego serwera bazy danych.

Jeśli jest to przekroczenie limitu czasu połączenia problem, szczególnie gdy MySQL próbuje użyć początkowego połączenia z serwerem, zwiększ wartość connect_timeout parametr. Ale w przypadku wartości BLOB które są większe niż max_allowed_packet , musisz ustawić wyższą wartość dla max_allowed_packet w swoim /etc/my.cnf plik konfiguracyjny w [mysqld] lub [client] sekcja, jak pokazano.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jeśli MySQL plik konfiguracyjny nie jest dla ciebie dostępny, możesz ustawić tę wartość za pomocą następującego polecenia w powłoce MySQL.

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

5. Zbyt wiele połączeń MySQL

W przypadku MySQL klient napotyka „zbyt wiele połączeń ”, oznacza to, że wszystkie dostępne połączenia są używane przez innych klientów. Liczba połączeń (domyślnie 151 ) jest kontrolowany przez max_connections zmienna systemowa; możesz rozwiązać problem, zwiększając jego wartość, aby umożliwić więcej połączeń w swoim /etc/my.cnf plik konfiguracyjny.

[mysqld]
max_connections=1000

6. Brak pamięci MySQL

W przypadku uruchomienia zapytania przy użyciu MySQL klienta programu i napotkany błąd, oznacza to, że MySQL nie ma wystarczającej ilości pamięci do przechowywania całego wyniku zapytania.

Pierwszym krokiem jest upewnienie się, że zapytanie jest poprawne, jeśli tak, wykonaj następujące czynności:

  • jeśli używasz klienta MySQL bezpośrednio, uruchom go za pomocą --quick switch , aby wyłączyć buforowane wyniki lub
  • jeśli używasz MyODBC sterownika, konfiguracyjny interfejs użytkownika (UI) ma zaawansowaną zakładkę dla flag. Zaznacz „Nie buforuj wyników „.

Innym świetnym narzędziem jest MySQL Tuner – przydatny skrypt, który połączy się z działającym serwerem MySQL i poda sugestie, jak można go skonfigurować w celu zwiększenia wydajności.

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

Aby uzyskać wskazówki dotyczące optymalizacji i optymalizacji wydajności MySQL, przeczytaj nasz artykuł:15 przydatnych porad dotyczących optymalizacji wydajności i optymalizacji wydajności MySQL/MariaDB.

7. MySQL ciągle się zawiesza

Jeśli napotkasz ten problem, powinieneś spróbować dowiedzieć się, czy problem polega na tym, że MySQL serwer umiera, czy jest to klient z problemem. Zwróć uwagę, że wiele awarii serwera jest spowodowanych przez uszkodzone pliki danych lub pliki indeksu.

Możesz sprawdzić stan serwera, aby ustalić, jak długo działa.

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

Alternatywnie uruchom następujące polecenie mysqladmin, aby sprawdzić czas pracy serwera MySQL.

$ sudo mysqladmin version -p 

Inne rozwiązania obejmują między innymi zatrzymanie MySQL serwer i włączenie debugowania, a następnie ponownie uruchom usługę. Możesz spróbować stworzyć przypadek testowy, który można wykorzystać do powtórzenia problemu. Ponadto otwórz dodatkowe okno terminala i uruchom następujące polecenie, aby wyświetlić statystyki procesu MySQL podczas wykonywania innych zapytań:

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

Konkluzja:ustalenie, co powoduje problem lub błąd

Chociaż przyjrzeliśmy się niektórym popularnym MySQL problemy i błędy, a także zapewnione sposoby ich rozwiązywania i rozwiązywania, najważniejszą rzeczą przy diagnozowaniu błędu jest zrozumienie, co on oznacza (pod względem tego, co go powoduje).

Jak więc możesz to ustalić? Poniższe punkty pomogą Ci ustalić, co dokładnie powoduje problem:

  1. Pierwszym i najważniejszym krokiem jest zajrzenie do logów MySQL, które są przechowywane w katalogu /var/log/mysql/ . Możesz użyć narzędzi wiersza poleceń, takich jak tail, aby czytać pliki dziennika.
  2. Jeśli usługa MySQL nie uruchomi się, sprawdź jej stan za pomocą systemctl lub użyj journetctl (z -xe flag) pod systemd, aby zbadać problem.
  3. Możesz także sprawdzić plik dziennika systemowego, taki jak /var/log/messages lub podobne z powodów Twojego problemu.
  4. Spróbuj użyć narzędzi, takich jak Mytop, spojrzenia, top, ps lub htop, aby sprawdzić, który program zajmuje cały procesor lub blokuje komputer, lub aby sprawdzić, czy nie kończy Ci się pamięć, miejsce na dysku, deskryptory plików lub niektóre inne ważne źródło.
  5. Zakładając, że problemem jest jakiś niekontrolowany proces, zawsze możesz spróbować go zabić (używając narzędzia pkill lub kill), aby MySQL działał normalnie.
  6. Przypuśćmy, że mysqld serwer sprawia problemy, możesz uruchomić polecenie:mysqladmin -u root ping lub mysqladmin -u root processlist aby uzyskać od niego jakąkolwiek odpowiedź.
  7. Jeśli problem dotyczy programu klienckiego podczas próby połączenia z serwerem MySQL, sprawdź, dlaczego nie działa prawidłowo, spróbuj uzyskać z niego jakiekolwiek dane wyjściowe w celu rozwiązywania problemów.

Możesz również przeczytać następujące artykuły związane z MySQL:

  1. Naucz się MySQL / MariaDB dla początkujących – część 1
  2. Jak monitorować bazy danych MySQL/MariaDB za pomocą Netdata w CentOS 7
  3. Jak przenieść wszystkie bazy danych MySQL ze starego na nowy serwer
  4. Mytop – przydatne narzędzie do monitorowania wydajności MySQL/MariaDB w systemie Linux
  5. 12 najlepszych praktyk bezpieczeństwa MySQL/MariaDB dla systemu Linux

Aby uzyskać więcej informacji, zapoznaj się z podręcznikiem MySQL Reference dotyczącym problemów i typowych błędów, który zawiera wyczerpującą listę typowych problemów i komunikatów o błędach, które możesz napotkać podczas korzystania z MySQL, w tym te, które omówiliśmy powyżej i nie tylko.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wizualne tworzenie baz danych za pomocą MySQL Workbench

  2. Jaka jest kolejność wierszy MySQL dla SELECT * FROM nazwa_tabeli;?

  3. Instalowanie określonych wersji pakietów za pomocą pip

  4. INSERT INTO...SELECT dla wszystkich kolumn MySQL

  5. Wstawianie obiektu Python datetime.datetime do MySQL