MySQL 오류 2006 : MySQL 서버가 사라졌습니다


238

사무실에서 서버를 실행하여 일부 파일을 처리하고 결과를 원격 MySQL 서버에보고합니다.

파일 처리에는 시간이 걸리고 프로세스는 다음 오류와 함께 반쯤 종료됩니다.

2006, MySQL server has gone away

MySQL 설정 wait_timeout 에 대해 들었지만 사무실 서버 또는 원격 MySQL 서버에서 변경해야합니까?


2
그것은 마녀 서버가 오류를 준다
bksi


11
Google에서 오는 사람들 : max_allowed_packet크기 나 wait_timeout양을 변경해도 문제가 해결되지 않으면 메모리 사용량을 확인하십시오. 같은 오류가 발생하여 서버의 메모리가 부족하여 발생했습니다. 1GB 스왑 파일을 추가하고 수정했습니다.
Pikamander2

2
@ Pikamander2 힌트 주셔서 감사합니다!
ihsan

4
오! 다 거짓말이야? MySQL 서버는 실제로 어디에도 가지 않았습니까? 여전히 서버에 있습니까? 와우! :))
Damilola Olowookere

답변:


32

연결 여부를 확인하고 필요한 경우 다시 설정하는 것이 더 쉬울 수 있습니다.

이에 대한 정보는 PHP : mysqli_ping 을 참조하십시오 .


좋은 점은 간헐적 인 프로세스가있는 경우 연결을 해제하는 것이 더 좋으므로 모든 연결을 다 사용하지는 않습니다. 연결 재 구축은 일반적으로 저렴합니다. +1
이즈미르 라미레즈

1
2018 년 : mysqli_ping 지원 중단
fb

@fb PDO로 무엇을 하는가?
beppe9000

359

이 문제가 여러 번 발생했으며 일반적으로 답변의 기본 설정이 매우 낮다는 것을 알았습니다 max_allowed_packet.

/etc/my.cnf(아래 [mysqld])를 8 또는 16M으로 올리면 일반적으로 수정됩니다. (MySql 5.7의 기본값 4194304은 4MB입니다.)

[mysqld]
max_allowed_packet=16M

참고 : 행이 없으면 작성하십시오.

참고 : 서버가 실행될 때 서버에서 설정할 수 있습니다.

사용하십시오 set global max_allowed_packet=104857600. 100MB로 설정됩니다.


28
서버가 실행될 때 서버에서 설정할 수 있습니다. "set global max_allowed_packet = 104857600"을 사용하십시오. 참고 : 내 값은 100MB로 설정합니다.
rickumali

26
C : XAMPP 사용자의 경우, my.cnf 파일에서 찾을 수 있습니다 \ XAMPP \ mysql을 \ 빈 \
발렌틴 Despa

3
WAMP에 : C : \ WAMP \ BIN \ MySQL의 \ mysql5.6.12 \의 my.ini, 세트의 max_allowed_packet = 500M [wampmysqld]에서
엘리아 와이즈

2
내 문제 tooo를 수정 :)
Altaf Hussain

2
중요 사항 :이 효과를 적용하려면 mysql 서버를 다시 시작해야했습니다. 즉 mysql.server stop, mysql.server start(2018 년 10 월, MySQL v5.7, MacOS)
Nitin Nain

41

저도 같은 문제가 있지만 changeing했다 max_allowed_packet에서 my.ini/my.cnf아래 파일을 [mysqld]트릭을했다.

라인을 추가

max_allowed_packet = 500M

이제 restart the MySQL service작업이 완료되면.


5
다른 사람은 16M을 썼고 500M을 썼는데이 설정의 의미는 무엇입니까?
pal4life 2016 년

1
@ pal4life 허용되는 삽입 문의 최대 크기입니다. insert 문이 16M 이상인 경우 어떻게 될까요?
Sathish D

이것은 나를 위해 일했지만 왜 그런지 모르겠습니다. 기본값은 1M이지만 100M으로 변경하면 오류가 사라졌습니다. 서버에서 유휴 스레드 수를 줄이기 위해 wait_timeout = 30을 설정하면 문제가 시작되었습니다.
Vincent

36

MySQL 명령 줄에서 다음 명령을 사용하여 크기가 7GB 이상인 MySQL 데이터베이스를 복원했으며 작동합니다.

set global max_allowed_packet=268435456;

왜 이것이 다운 보트인지 궁금하십니까? 패킷 크기와 관련된 오류가 의미가 있습니다 ...
FlorinelChis

이렇게하면 내 문제가 해결되었습니다. 직접 질문과 관련이 없지만 다른 문제가있는 사람들을 도울 것입니다.
Migerusantte

변경된 값을 확인하거나 현재 값을 보려면show variables like 'max_allowed_packet';
Marcin

16

오류 : 2006 ( CR_SERVER_GONE_ERROR )

메시지 : MySQL 서버가 사라졌습니다

일반적으로 연결을 재 시도한 후 쿼리를 다시 수행하여이 문제를 해결할 수 있습니다. 완전히 포기하기 전에 3-4 번 정도 시도하십시오.

PDO를 사용한다고 가정하겠습니다. 그렇다면 PDO 예외를 포착하고 카운터를 증가시킨 다음 카운터가 임계 값 미만인 경우 다시 시도하십시오.

시간 초과를 일으키는 쿼리가있는 경우 다음을 실행하여이 변수를 설정할 수 있습니다.

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

여기서 300은 쿼리에 걸리는 최대 시간을 초 단위로 생각합니다.

MySQL 연결 문제를 처리하는 방법에 대한 추가 정보.

편집 : 또한 사용할 수있는 두 가지 다른 설정은 net_write_timeoutnet_read_timeout입니다.


16

MAMP (비 전문가 버전)에 추가했습니다.

--max_allowed_packet=268435456

...\MAMP\bin\startMysql.sh

크레딧 및 자세한 내용은 여기


이거 정말 고마워!
TechyDude

공장! 감사합니다!
Simon Franzen


11

이 오류에는 몇 가지 원인이 있습니다.

MySQL / MariaDB 관련 :

  • wait_timeout -연결을 닫기 전에 서버가 연결이 활성화되기를 기다리는 시간 (초)입니다.
  • interactive_timeout -서버가 대화식 연결을 기다리는 시간 (초)입니다.
  • max_allowed_packet-패킷 또는 생성 / 중간 문자열의 최대 바이트 크기입니다. 1024의 배수로 가장 큰 BLOB만큼 크게 설정하십시오.

my.cnf의 예 :

[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M

서버 관련 :

  • 서버에 메모리가 가득합니다-RAM에 대한 정보를 확인하십시오. free -h

프레임 워크 관련 :

  • 프레임 워크의 설정을 확인하십시오. 장고 예를 들어 사용 CONN_MAX_AGE( docs 참조 )

그것을 디버깅하는 방법 :

  • MySQL / MariaDB 변수의 값을 확인하십시오.
    • SQL로 : SHOW VARIABLES LIKE '%time%';
    • 명령 줄 : mysqladmin variables
  • 오류에 대한 자세한 정보 표시 :
    • MariaDB : log_warnings = 4
    • MySQL : log_error_verbosity = 3
  • 오류에 대한 자세한 내용은 문서를 확인하십시오.

9

Windows에서 xampp를 사용하는 사람은이 경로 xampp / mysql / bin / my.ini를 사용하고 max_allowed_packet (섹션 [mysqld])을 원하는 크기로 변경해야합니다. 예 :

max_allowed_packet=8M

php.ini (xampp / php / php.ini)에서 upload_max_filesize를 선택 크기로 변경하십시오. 예 :

upload_max_filesize=8M

내가 이것을 발견 할 때까지 언젠가 두통을 줘. 도움이 되길 바랍니다.


이것은 선택된 답변이어야합니다
bysanchy

upload_max_filesize변수를 찾을 수 없습니다 . 그것은 항상 mysql에서 인식되지 않습니다
Aminah Nuraini

9

DigitalOcean Ubuntu 서버에서 이와 동일한 오류가 발생했습니다.

max_allowed_packet 및 wait_timeout 설정을 변경하려고 시도했지만 둘 중 어느 것도 수정하지 않았습니다.

서버에 RAM이 부족한 것으로 나타났습니다. 1GB 스왑 파일을 추가했는데 문제가 해결되었습니다.

메모리에 문제 free -h가 있는지 확인하십시오 .


1
정말 고맙습니다! 내 DigitalOcean에서 동일한 문제가 있었고이 솔루션이 효과가있었습니다! 스크립트의 많은 인스턴스를 실행했지만 일부 스레드 후에 갑자기 모든 기존 연결이 중지되고 종료되었습니다. 이제 다 괜찮아
Stalinko September

7

나에게 RAM 문제였습니다.

CPU 코어가 12 개이고 RAM이 32GB 인 서버에서도 같은 문제가 발생했습니다. 나는 더 많은 것을 연구하고 RAM을 확보하려고했습니다. RAM을 확보하기 위해 Ubuntu 14.04에서 사용한 명령은 다음과 같습니다.

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

그리고 그것은 모든 것을 고쳤습니다. 나는 매 시간마다 cron을 실행하도록 설정했습니다.

crontab -e

0 * * * * bash /root/ram.sh;

그리고이 명령을 사용하여 사용 가능한 RAM의 양을 확인할 수 있습니다.

free -h

그리고 당신은 다음과 같은 것을 얻을 것입니다 :

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G

5

필자의 경우 open_files_limit변수 값이 낮아서 데이터 파일에 대한 mysqld의 액세스를 차단했습니다.

나는 그것을 확인했다 :

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

변수를 큰 값으로 변경 한 후 서버가 다시 활성화되었습니다.

[mysqld]
open_files_limit = 100000

5

64 비트 WAMPSERVER를 사용하는 경우 WAMP는 [wsqlmyumpd64]에 설정된 값이 아니라 [mysqldump]에 설정된 값이 아닌 문제가있는 max_allowed_packet 을 여러 번 검색하십시오 . max_allowed_packet = 64M과 같은 것으로 설정하십시오.

잘하면 이것은 다른 Wampserver 사용자에게 도움이되기를 바랍니다.


5

이것은 일반적으로 MySQL 서버 연결 문제 또는 시간 초과를 나타냅니다 . 일반적으로 변경하여 해결할 수 있습니다 아웃 (wait_timeout)의 max_allowed_packet을 에서 의 my.cnf 또는 유사한.

나는이 가치들을 제안 할 것이다 :

wait_timeout = 28800

max_allowed_packet = 8M


4

Vagrant Box의 경우 상자에 충분한 메모리를 할당하십시오.

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end

1
감사합니다 :)
SynackSA

4

가능성이 거의없는 시나리오는 클라이언트와 서버 사이에 방화벽이있어 TCP 재설정을 강제로 연결하는 것입니다.

나는 그 문제가 있었고 회사 F5 방화벽이 5 분 이상 유휴 상태 인 비활성 세션을 종료하도록 구성되어 있음을 발견했습니다.

다시 한 번, 이것은 드문 시나리오입니다.


4

Mysql 서버의 로그를 확인하는 것이 좋습니다.

당신에게 말할 것입니다.


4

xampp 서버를 사용하는 경우 :

xampp-> mysql-> bin-> my.ini로 이동하십시오.

아래 매개 변수를 변경하십시오.

max_allowed_packet = 500M

innodb_log_file_size = 128M

이것은 나에게 많은 도움이되었다 :)


3

에서 아래 리그의 주석 처리를 제거하면 my.ini/my.cnf큰 파일이 작은 부분으로 분할됩니다.

# binary logging format - mixed recommended
# binlog_format=mixed

# binary logging format - mixed recommended
binlog_format=mixed

3

이 오류는 "# 2006-MySQL 서버가 사라졌습니다"에 대한 해결책을 찾았습니다. 해결책은 두 파일을 확인해야한다는 것입니다.

  1. config.inc.php
  2. config.sample.inc.php

Windows에서 이러한 파일의 경로는

C:\wamp64\apps\phpmyadmin4.6.4

이 두 파일에서이 값은 다음과 같습니다.

$cfg['Servers'][$i]['host']must be 'localhost' .

제 경우에는 다음과 같습니다.

$cfg['Servers'][$i]['host'] = '127.0.0.1';

그것을 다음으로 변경하십시오 :

"$cfg['Servers'][$i]['host']" = 'localhost';

둘 다 확인하십시오.

  1. config.inc.php
  2. config.sample.inc.php 파일은 'localhost'여야합니다.

그리고 마지막 세트 :

$cfg['Servers'][$i]['AllowNoPassword'] = true;

그런 다음 Wampserver를 다시 시작하십시오.


phpmyadmin 사용자 이름 및 비밀번호를 변경하려면

config.inc.php 파일을 통해 phpmyadmin의 사용자 이름과 비밀번호를 직접 변경할 수 있습니다

이 두 줄

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

여기에서 새 사용자 이름과 비밀번호를 제공 할 수 있습니다. 변경 후 파일을 저장하고 WAMP 서버를 다시 시작하십시오.


2

내 Ubuntu 데스크탑의 다른 MySQL 클라이언트 소프트웨어에 오류 2006 메시지가 표시되었습니다. 내 JDBC 드라이버 버전이 너무 오래된 것으로 나타났습니다.


2

.sql 파일 크기에 문제가있을 수 있습니다.

xampp를 사용하는 경우 xampp 제어판으로 이동-> MySql 구성 클릭-> my.ini 열기.

패킷 크기를 늘리십시오.

max_allowed_packet = 2M -> 10M

2

XAMPP를 사용하는 경우 더 쉬운 방법이 있습니다. XAMPP 제어판을 열고 mysql 섹션에서 config 버튼을 클릭하십시오.
여기에 이미지 설명을 입력하십시오

이제 my.ini를 클릭하면 편집기에서 열립니다. max_allowed_packet을 필요한 크기로 업데이트하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 mysql 서비스를 다시 시작하십시오. MySQL 서비스에서 중지를 클릭하고 다시 시작을 클릭하십시오. 몇 분 기다립니다. 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

그런 다음 Mysql 쿼리를 다시 실행하십시오. 그것이 효과가 있기를 바랍니다.


2

MAMP 5.3에서는 my.cnf를 찾을 수 없으며 max_allowed_packet이 변수에 저장되어 있으므로 추가하지 않습니다.

한 가지 해결책은 다음과 같습니다.

  1. 이동 에 http : // localhost를 / phpMyAdmin을
  2. SQL 탭으로 이동
  3. SHOW VARIABLES를 실행하고 값이 작 으면 큰 값으로 실행하십시오.
  4. 다음 쿼리를 실행하면 max_allowed_packet이 7gb로 설정됩니다.

    전역 설정 max_allowed_packet = 268435456;

일부의 경우 다음 값도 늘려야 할 수 있습니다.

set global wait_timeout = 600;
set innodb_log_file_size =268435456;

0

XAMPP를 사용하는 사용자의 경우 C : \ xampp \ mysql \ bin \ my.ini에 max_allowed_packet 매개 변수 가 2 개 있습니다.


0

이 오류는 기본적으로 두 가지 이유로 발생합니다.

  1. RAM이 너무 낮습니다.
  2. 연결하려고하면 데이터베이스 연결이 닫힙니다.

아래 코드를 사용해보십시오.

# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
    try:            
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()
    except (AttributeError, MySQLdb.OperationalError):
        self.__init__()
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()

뒤에있는 이유, 특히 두 번째 이유에 관계없이 오류를 완화합니다.

RAM이 부족하여 발생하는 경우 코드, 데이터베이스 구성에서 데이터베이스 연결 효율성을 높이거나 RAM을 높이십시오.


0

이것이 누군가를 돕는 경우를 대비하여 :

응용 프로그램의 여러 부분에서 호출되는 함수에서 연결을 열고 닫을 때이 오류가 발생했습니다. 연결이 너무 많아 기존 연결을 재사용하거나 버리고 새 연결을 만드는 것이 좋습니다.

  public static function getConnection($database, $host, $user, $password)
 {
 if (!self::$instance) {
  return self::newConnection($database, $host, $user, $password);
 } elseif ($database . $host . $user != self::$connectionDetails) {

self :: $ instance-> query ( 'KILL CONNECTION_ID ()'); self :: $ instance = null; 자체 반환 :: newConnection ($ database, $ host, $ user, $ password); } self :: $ instance를 반환합니다. } 우리는 살인에 대해 너무 철저히 알고 있었기 때문에 오래된 연결에서 중요한 일을하는 프로세스는 결코 사업을 끝내지 못했습니다. 그래서 우리는이 줄들을 떨어 뜨 렸습니다

  self::$instance->query('KILL CONNECTION_ID()');
  self::$instance = null;

머신의 하드웨어 및 설정에서 허용하는대로 다음을 추가하여 서버에서 허용되는 연결 수를 늘 렸습니다.

max_connections = 500

구성 파일에. 이것은 지금 우리의 문제를 해결했고 우리는 mysql 연결을 죽이는 것에 대해 배웠습니다.


-5

잠시 오프라인 상태임을 알고 있다면 연결을 닫고 처리하고 다시 연결하고 보고서를 작성할 수 있습니다.


2
MySQL은 8 시간 후에 유휴 연결을 닫으므로 실제로 실행 가능한 답변입니다.
Bojan Hrnkas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.