일반적으로 오류 :
오류 : 2006 ( CR_SERVER_GONE_ERROR
)-MySQL 서버가 사라졌습니다
클라이언트가 서버에 질문을 보낼 수 없음을 의미 합니다 .
mysql
수입
특정 경우에서를 통해 데이터베이스 파일을 가져 오는 동안 mysql
SQL 파일의 일부 쿼리가 너무 커서 가져올 수 없으므로 서버에서 실행할 수 없으므로 첫 번째 오류가 발생하면 클라이언트가 실패합니다.
따라서 다음과 같은 가능성이 있습니다.
나머지 쿼리를 진행하고 실행하려면 강제 옵션 ( -f
)을 추가하십시오 mysql
.
데이터베이스에 캐시와 관련된 큰 쿼리가있는 경우 유용합니다.
증가 max_allowed_packet
및wait_timeout
서버 설정 (예에서 ~/.my.cnf
).
--skip-extended-insert
큰 쿼리를 분류하는 옵션을 사용하여 데이터베이스를 덤프하십시오 . 그런 다음 다시 가져 오십시오.
에 --max-allowed-packet
옵션을 적용 해보십시오 mysql
.
일반적인 이유
일반적으로이 오류는 다음과 같은 여러 가지를 의미 할 수 있습니다.
서버에 대한 쿼리가 잘못되었거나 너무 큼
솔루션 : 변수를 늘리십시오max_allowed_packet
.
변수가 [mysqld]
아닌 섹션 아래에 있는지 확인하십시오 [mysql]
.
테스트에 많은 숫자를 사용하는 것을 두려워하지 마십시오 (예 1G
:).
MySQL / MariaDB 서버를 다시 시작하는 것을 잊지 마십시오.
다음을 통해 값이 올바르게 설정되었는지 다시 확인하십시오.
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
클라이언트 쪽의 TCP / IP 연결에서 시간이 초과되었습니다.
솔루션 : 변수를 늘리십시오wait_timeout
.
서버 연결이 닫힌 후 쿼리를 실행하려고했습니다.
해결 방법 : 응용 프로그램의 논리 오류를 수정해야합니다.
호스트 이름 조회에 실패했거나 (예 : DNS 서버 문제) 서버가 --skip-networking
옵션 으로 시작되었습니다 .
방화벽이 MySQL 포트를 차단할 수도 있습니다 (예 : 기본적으로 3306).
실행중인 스레드가 종료되었으므로 다시 시도하십시오.
쿼리를 실행하는 동안 서버가 죽는 버그가 발생했습니다.
다른 호스트에서 실행중인 클라이언트는 연결하는 데 필요한 권한이 없습니다.
그리고 더 많은, 그래서 더 많은 배우 : B.5.2.9 MySQL 서버는 사라했다 .
디버깅
전문가 수준의 디버그 아이디어는 다음과 같습니다.
로그를 확인하십시오. 예 :
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
mysql
, telnet
또는 핑 기능 (예 : mysql_ping
PHP)을 통해 연결을 테스트하십시오 .
다음 tcpdump
과 같이 MySQL 통신을 스니핑하십시오 (소켓 연결에는 작동하지 않음).
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Linux에서는을 사용하십시오 strace
. BSD / 맥 사용에 dtrace
/ dtruss
예
sudo dtruss -a -fn mysqld 2>&1
참조 : DTracing MySQL 시작하기
26.5 MySQL 디버깅 및 포팅 에서 MySQL 서버 또는 클라이언트를 디버깅하는 방법에 대해 자세히 알아보십시오 .
참조를 위해, 클라이언트 명령에 대한 오류를 발생 sql-common/client.c
시키는 파일 의 소스 코드를 확인하십시오 CR_SERVER_GONE_ERROR
.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}