웹사이트 검색

MySQL의 일반적인 오류를 해결하는 데 유용한 팁


MySQLOracle 소유의 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDMS)입니다. 수년 동안 웹 기반 애플리케이션의 기본 선택이었으며 다른 데이터베이스 엔진과 비교하여 여전히 인기가 높습니다.

추가 읽기: RHEL/CentOS 및 Fedora에 최신 MySQL을 설치하는 방법

MySQL은 웹 애플리케이션용으로 설계 및 최적화되었습니다. 이는 Facebook, Twitter, 와 같은 주요 웹 기반 애플리케이션의 핵심 부분을 구성합니다. Wikipedia, YouTube 및 기타 다수.

귀하의 사이트 또는 웹 애플리케이션이 MySQL로 구동됩니까? 이 세부 문서에서는 MySQL 데이터베이스 서버의 문제 및 일반적인 오류를 해결하는 방법을 설명합니다. 문제의 원인을 파악하는 방법과 이를 해결하기 위해 수행할 작업에 대해 설명합니다.

1. 로컬 MySQL 서버에 연결할 수 없습니다

MySQL의 일반적인 클라이언트-서버 연결 오류 중 하나는 "ERROR 2002 (HY000): '/var/run/mysqld/mysqld.sock' 소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다(2)"입니다. ”.

이 오류는 호스트 시스템에서 실행 중인 MySQL 서버 (mysqld)가 없거나 잘못된 Unix 소켓 파일 이름 또는 TCP/IP<를 지정했음을 나타냅니다. 서버에 연결을 시도할 때 포트.

표시된 대로 ps 명령과 grep 명령을 함께 사용하여 데이터베이스 서버 호스트에서 mysqld라는 프로세스를 확인하여 서버가 실행 중인지 확인하세요.

ps xa | grep mysqld | grep -v mysqld

위 명령에 출력이 표시되지 않으면 데이터베이스 서버가 실행되고 있지 않은 것입니다. 따라서 클라이언트가 연결할 수 없습니다. 서버를 시작하려면 다음 systemctl 명령을 실행하십시오.

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

MySQL 서비스 상태를 확인하려면 다음 명령어를 사용하세요.

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

위 명령의 출력에 따르면 MySQL 서비스가 실패했습니다. 이러한 경우에는 다시 시작하여 상태를 다시 한 번 확인해 보시기 바랍니다.

sudo systemctl restart mysql
sudo systemctl status mysql

또한, 다음 명령으로 서버가 실행 중인데도 여전히 위의 오류가 표시되는 경우 TCP/IP 포트가 방화벽이나 포트 차단 서비스에 의해 차단되어 있는지도 확인해야 합니다. .

ps xa | grep mysqld | grep -v mysqld

서버가 수신 대기 중인 포트를 찾으려면 표시된 대로 netstat 명령을 사용하십시오.

sudo netstat -tlpn | grep "mysql"

2. MySQL 서버에 연결할 수 없습니다

일반적으로 발생하는 또 다른 연결 오류는 "(2003) 'server'(10061)에서 MySQL 서버에 연결할 수 없습니다. 이는 네트워크 연결이 거부되었음을 의미합니다.

여기서는 먼저 위와 같이 시스템에 MySQL 서버가 실행되고 있는지 확인하세요. 또한 서버에 네트워크 연결이 활성화되어 있고 연결에 사용하는 네트워크 포트가 서버에 구성되어 있는지 확인하십시오.

MySQL 서버에 연결하려고 할 때 발생할 수 있는 다른 일반적인 오류는 다음과 같습니다.

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)

이러한 오류는 서버가 실행 중일 수 있지만 서버가 수신하는 것과 다른 TCP/IP 포트, 명명된 파이프 또는 Unix 소켓 파일을 사용하여 연결을 시도하고 있음을 나타냅니다.

3. MySQL의 액세스 거부 오류

MySQL에서 사용자 계정은 사용자 이름과 사용자가 서버에 연결할 수 있는 클라이언트 호스트로 정의됩니다. 또한 계정에는 비밀번호와 같은 인증 자격 증명이 있을 수도 있습니다.

"액세스 거부" 오류의 원인은 다양하지만 일반적인 원인 중 하나는 서버가 클라이언트 프로그램이 연결할 때 사용하도록 허용하는 MySQL 계정과 관련되어 있습니다. 이는 연결에 지정된 사용자 이름에 데이터베이스에 액세스할 수 있는 권한이 없음을 나타냅니다.

MySQL을 사용하면 클라이언트 사용자가 서버에 연결하고 서버에서 관리하는 데이터에 액세스할 수 있는 계정을 생성할 수 있습니다. 이와 관련하여 액세스 거부 오류가 발생하는 경우 사용자 계정이 사용 중인 클라이언트 프로그램을 통해 서버에 연결할 수 있는지 확인하고 연결이 시작되는 호스트도 확인하세요. .

표시된 대로 SHOW GRANTS 명령을 실행하면 특정 계정에 어떤 권한이 있는지 확인할 수 있습니다.

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

MySQL 셸에서 다음 명령을 사용하여 특정 데이터베이스의 특정 사용자에게 원격 IP 주소에 대한 권한을 부여할 수 있습니다.

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

또한 액세스 거부 오류MySQL 연결 문제로 인해 발생할 수도 있습니다. 이전에 설명한 오류를 참조하세요.

4. MySQL 서버와의 연결이 끊어졌습니다.

다음 이유 중 하나로 인해 이 오류가 발생할 수 있습니다: 네트워크 연결 불량, 연결 시간 초과 또는 다음보다 큰 BLOB 문제max_allowed_packet. 네트워크 연결 문제가 있는 경우 특히 원격 데이터베이스 서버에 액세스하는 경우 네트워크 연결이 양호한지 확인하십시오.

연결 시간 초과 문제인 경우, 특히 MySQL이 서버에 대한 초기 연결을 사용하려고 할 때 connect_timeout 매개변수의 값을 늘리세요. . 그러나 max_allowed_packet보다 큰 BLOB 값의 경우 /etc에서 max_allowed_packet에 더 높은 값을 설정해야 합니다. /my.cnf 구성 파일은 그림과 같이 [mysqld] 또는 [client] 섹션 아래에 있습니다.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

MySQL 구성 파일에 액세스할 수 없는 경우 MySQL 셸에서 다음 명령을 사용하여 이 값을 설정할 수 있습니다.

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

5. 너무 많은 MySQL 연결

MySQL 클라이언트에 '연결이 너무 많음' 오류가 발생하는 경우 이는 사용 가능한 모든 연결이 다른 클라이언트에서 사용 중임을 의미합니다. 연결 수(기본값은 151)는 max_connections 시스템 변수에 의해 제어됩니다. /etc/my.cnf 구성 파일에서 더 많은 연결을 허용하도록 값을 늘려 문제를 해결할 수 있습니다.

[mysqld]
max_connections=1000

6. 메모리 부족 MySQL

MySQL 클라이언트 프로그램을 사용하여 쿼리를 실행했는데 문제의 오류가 발생하는 경우 이는 MySQL에 전체 쿼리 결과를 저장할 메모리가 부족하다는 의미입니다.

첫 번째 단계는 쿼리가 올바른지 확인하는 것입니다. 올바른 경우 다음을 수행합니다.

  • MySQL 클라이언트를 직접 사용하는 경우 --quick switch로 시작하여 캐시된 결과를 비활성화하거나
  • MyODBC 드라이버를 사용하는 경우 구성 사용자 인터페이스(UI)에 플래그에 대한 고급 탭이 있습니다. '결과를 캐시하지 않음'을 선택하세요.

또 다른 훌륭한 도구는 MySQL Tuner입니다. 이는 실행 중인 MySQL 서버에 연결하고 더 높은 성능을 위해 구성할 수 있는 방법에 대한 제안을 제공하는 유용한 스크립트입니다.

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

MySQL 최적화 및 성능 조정 팁에 대해서는 기사: 15가지 유용한 MySQL/MariaDB 성능 조정 및 최적화 팁을 읽어보세요.

7. MySQL이 계속 충돌합니다

이 문제가 발생하면 MySQL 서버가 죽는 것이 문제인지 아니면 클라이언트에 문제가 있는 것인지 확인해야 합니다. 많은 서버 충돌은 손상된 데이터 파일이나 인덱스 파일로 인해 발생합니다.

서버 상태를 확인하여 서버가 얼마나 오래 실행되었는지 확인할 수 있습니다.

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

또는 다음 mysqladmin 명령을 실행하여 MySQL 서버의 가동 시간을 확인하세요.

sudo mysqladmin version -p 

다른 해결 방법에는 MySQL 서버를 중지하고 디버깅을 활성화한 다음 서비스를 다시 시작하는 것이 포함되지만 이에 국한되지는 않습니다. 문제를 반복하는 데 사용할 수 있는 테스트 사례를 만들어 볼 수 있습니다. 또한 추가 터미널 창을 열고 다음 명령을 실행하여 다른 쿼리를 실행하는 동안 MySQL 프로세스 통계를 표시합니다.

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

요점: 문제나 오류의 원인이 무엇인지 파악

몇 가지 일반적인 MySQL 문제와 오류를 살펴보고 문제 해결 방법도 제공했지만 오류 진단에서 가장 중요한 것은 오류의 의미(원인이 무엇인지)를 이해하는 것입니다. .

그러면 이것을 어떻게 결정할 수 있습니까? 다음 사항은 문제의 정확한 원인을 확인하는 방법을 안내합니다.

  1. 첫 번째이자 가장 중요한 단계는 /var/log/mysql/ 디렉터리에 저장된 MySQL 로그를 조사하는 것입니다. tail과 같은 명령줄 유틸리티를 사용하여 로그 파일을 읽을 수 있습니다.
  2. MySQL 서비스가 시작되지 않으면 systemctl을 사용하여 상태를 확인하거나 systemd에서 journetctl(-xe 플래그 사용) 명령을 사용하여 문제를 조사합니다.
  3. /var/log/messages 또는 이와 유사한 시스템 로그 파일을 검사하여 문제의 원인을 확인할 수도 있습니다.
  4. Mytop, glans, top, ps 또는 htop과 같은 도구를 사용하여 어떤 프로그램이 CPU를 모두 차지하고 있는지 또는 시스템을 잠그고 있는지 확인하거나 메모리, 디스크 공간, 파일 설명자 또는 기타 중요한 리소스가 부족하지 않은지 검사해 보십시오. .
  5. 문제가 일부 폭주 프로세스라고 가정하면 MySQL이 정상적으로 작동하도록 언제든지 해당 프로세스를 종료하려고 시도할 수 있습니다(pkill 또는 kill 유틸리티 사용).
  6. mysqld 서버가 문제를 일으킨다고 가정하면 mysqladmin -u root ping 또는 mysqladmin -u root processlist 명령을 실행하여 문제를 확인할 수 있습니다. 그것으로부터의 응답.
  7. MySQL 서버에 연결을 시도하는 동안 클라이언트 프로그램에 문제가 있는 경우 제대로 작동하지 않는 이유를 확인하고 문제 해결을 위해 출력을 얻으십시오.

다음 MySQL 관련 기사를 읽어볼 수도 있습니다.

  1. 초보자를 위한 MySQL/MariaDB 배우기 - 1부
  2. CentOS 7에서 Netdata를 사용하여 MySQL/MariaDB 데이터베이스를 모니터링하는 방법
  3. 모든 MySQL 데이터베이스를 이전 서버에서 새 서버로 전송하는 방법
  4. Mytop – Linux에서 MySQL/MariaDB 성능을 모니터링하는 데 유용한 도구
  5. 12가지 Linux용 MySQL/MariaDB 보안 모범 사례

자세한 내용은 문제 및 일반적인 오류에 관한 MySQL 참조 매뉴얼을 참조하세요. 여기에는 위에서 논의한 내용을 포함하여 MySQL을 사용하는 동안 발생할 수 있는 일반적인 문제와 오류 메시지가 포괄적으로 나열되어 있습니다.