programing

오류 2006(HY000):MySQL 서버가 사라졌습니다.

projobs 2022. 12. 20. 22:53
반응형

오류 2006(HY000):MySQL 서버가 사라졌습니다.

는 큰 파일(큰 SQL 파일)(SQL 파일)(SQL 파일)(SQL 파일SQL 파일)을합니다.INSERT쿼리)를 클릭합니다.

mysql>  source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ***

테이블에는 아무것도 갱신되지 않았습니다.테이블/데이터베이스 삭제 및 삭제 취소와 MySQL 재시작을 시도했습니다.이것으로는 문제를 해결할 수 없습니다.

최대 패킷 크기는 다음과 같습니다.

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+

파일 크기는 다음과 같습니다.

$ ls -s file.sql 
79512 file.sql

다른 방법을 시도해보니...

$ ./mysql -u root -p my_db < file.sql
Enter password: 
ERROR 2006 (HY000) at line 1: MySQL server has gone away
max_allowed_packet=64M

을 에 추가합니다.my.cnf파일을 사용하면 문제가 해결됩니다.

이는 열의 값이 커서 문제가 발생할 경우 여기에서 설명을 찾을 수 있습니다.

Windows 의 경우, 이 파일은 다음의 장소에 있습니다.\ProgramData\MySQL\MySQL Server 5.6인치

Linux(Ubuntu): /etc/mysql

허용된 최대 패킷 수를 늘릴 수 있습니다.

SET GLOBAL max_allowed_packet=1073741824;

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

어떤 이유로 글로벌 업데이트와 my.cnf 설정이 작동하지 않았습니다.:max_allowed_packet여기서 일하는 고객에게 직접 가치를 부여합니다.

mysql -h <hostname> -u username -p --max_allowed_packet=1073741824 <databasename> < db.sql

일반적으로 오류:

((: 2006)CR_SERVER_GONE_ERROR - .) - MySQL 서버입니다.

클라이언트가 서버에 질문을 송신할 없었던 것을 의미합니다.


mysql

Import를 통해 mysql이는 SQL 파일의 일부 쿼리가 너무 커서 가져올 수 없으며 서버에서 실행할 수 없기 때문에 처음 발생한 오류에서 클라이언트가 실패했음을 의미합니다.

다음과 같은 가능성이 있습니다.

  • [ ]옵션([Force])-f의 경우,mysql나머지 쿼리를 계속 실행하여 실행합니다.

    이것은 데이터베이스에 캐시와 관련된 대규모 쿼리가 있지만 관련이 없는 경우에 유용합니다.

  • 서버 구성을 늘립니다(예:~/.my.cnf를 참조해 주세요.

  • 를 사용하여 를 덤프합니다.--skip-extended-insert이치노그런 다음 다시 가져옵니다.

  • 도 한번 써보세요.--max-allowed-packet을 지정합니다.mysql.


일반적인 이유

일반적으로 이 오류는 다음과 같은 여러 가지 의미를 가질 수 있습니다.

  • 서버에 대한 쿼리가 잘못되었거나 너무 큽니다.

    솔루션:변수를 늘립니다.

    • 는 반드시 '어느 쪽으로 가야 한다' 에 있어야 합니다.[mysqld] " " 가 아닌 " "[mysql].

    • 하는 것을 마십시오: " " " " " " " " 등).1G를 참조해 주세요.

    • MySQL/MariaDB 서버를 재시작하는 것을 잊지 마십시오.

    • 다음 방법으로 값이 올바르게 설정되었는지 다시 확인합니다.

      mysql -sve "SELECT @@max_allowed_packet" # or:
      mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
      
  • 클라이언트측의 TCP/IP 접속으로부터 타임 아웃이 발생했습니다.

    솔루션:변수를 늘립니다.

  • 서버에 대한 연결이 닫힌 후 쿼리를 실행하려고 했습니다.

    솔루션:응용 프로그램의 논리 오류를 수정해야 합니다.

  • 실패했거나(들어 의 문제가 「DNS」, 「DNS」, 「DNS」, 「DNS」로 하고 있습니다.--skip-networking★★★★★★ 。

    방화벽이 MySQL 포트를 차단할 수도 있습니다(기본값으로는 3306).

  • 실행 중인 스레드가 중지되었으므로 다시 시도하십시오.

  • 쿼리 실행 중 서버가 정지하는 오류가 발생했습니다.

  • 다른 호스트에서 실행 중인 클라이언트는 연결하는 데 필요한 권한이 없습니다.

  • 자세한 내용은 B.5.2.9 MySQL 서버가 없어졌습니다.


디버깅

전문가 수준의 디버깅 아이디어를 몇 가지 소개합니다.

  • 로그를 확인합니다.

    sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
    
  • 하려면 , 다음의 순서에 따릅니다.mysql,telnet또는 ping 함수(예: PHP)를 사용합니다.

  • tcpdumpMySQL 통신을 스니핑합니다(소켓 연결에는 작동하지 않습니다). §:

    sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
    
  • 를 사용합니다.strace에서는 BSD/Mac을 사용합니다dtrace/dtruss

    sudo dtruss -a -fn mysqld 2>&1
    

    참고 항목: MySQL DTracing 시작

MySQL 서버 또는 클라이언트를 디버깅하는 방법에 대한 자세한 내용은 26.5 MySQL 디버깅포팅.

참조를 위해 파일 내의 소스 코드를 확인합니다.CR_SERVER_GONE_ERROR commandclient 가 발생했습니다.

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;
}

했습니다.ERROR 2006 (HY000) at line 97: MySQL server has gone away는 5GB 이상의 SQL 파일을 해야 합니다.

  1. 다른 사람의 권고에 따라 /etc/my.cnf를 작성했습니다.내용은 다음과 같습니다.

    [mysql]
    connect_timeout = 43200
    max_allowed_packet = 2048M
    net_buffer_length = 512M
    debug-info = TRUE
    
  2. " " "--force --wait --reconnect (즉,)로)에 따라mysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect를 참조해 주세요.

중요사항:두 단계를 모두 수행해야 했습니다.왜냐하면 /etc/my.cnf 파일을 변경하고 플래그를 추가하지 않으면 Import 후 일부 테이블이 없어지기 때문입니다.

사용하는 시스템:OSX El Capitan 10.11.5, mysql Ver 14.14 Distribute 5.5.51 for osx10.8 (i386)

사용할 수 있는 변수를 확인하기 위해

$> mysqladmin variables -u user -p 

그러면 현재 변수(이 경우 max_allowed_packet)가 표시됩니다.다른 답변에서 말한 것처럼 이 변수를 일시적으로 설정할 수 있습니다.

mysql> SET GLOBAL max_allowed_packet=1072731894

제 경우 cnf파일이 고려되지 않았고 왜 그런지 알 수 없기 때문에 SET GLOBAL 코드가 도움이 되었습니다.

데이터베이스에 루트(또는 SUPER 권한)로 로그인하여 다음 작업을 수행할 수도 있습니다.

set global max_allowed_packet=64*1024*1024;

MySQL my my my my my 。 때 할 점은 한다는 것입니다.my.cnf다음과 같이 합니다.

[mysqld]
max_allowed_packet=64M

MySQL을 재시작한 후 변경을 확인합니다.

show variables like 'max_allowed_packet';

명령줄도 사용할 수 있지만 시스템 업데이트 및 패치에서 살아남지 못할 수 있는 Start/Stop 스크립트를 업데이트해야 할 수 있습니다.

요청하신 대로 저만의 답변을 여기에 추가하겠습니다.효과가 있다니 다행이네요!

은 이 것입니다.wait_timeoutconnect_timeout는 "" " " " " " 아래에 .[mysqld]

400MB의 mysql 백업을 복구해야 했습니다.이렇게 하면 효과가 있었습니다(아래에서 사용한 값은 다소 과장되어 있습니다만, 요점은 알 수 있습니다).

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE
connect_timeout = 1000000
net_write_timeout = 1000000
wait_timeout = 1000000
max_allowed_packet = 1024M
interactive_timeout = 1000000
net_buffer_length = 200M
net_read_timeout = 1000000
set GLOBAL delayed_insert_timeout=100000

블록 따옴표

같은 문제가 있었는데 my.ini/my.cnf 파일에서 max_allowed_packet을 [mysqld]아래에 있는 my.ini/my.cnf 파일로 변경한 것이 문제가 되었습니다.

행을 추가하다

max_allowed_packet=500M

작업이 완료되면 MySQL 서비스를 재시작합니다.

여기서 몇 가지 일이 일어날 수 있습니다.

  • 의 ★★★★★★★★★★★★★★★★★.INSERT실행시간이 길어지고 클라이언트의 접속이 끊어집니다.다시 연결할 때 데이터베이스를 선택하지 않으므로 오류가 발생합니다. 중 입니다.

$mysql db_name <소스.sql

  • 해 보는 입니다.php 하다 문장의 할 수 .각 장시간 실행 스테이트먼트를 종료한 후 연결을 닫고 다시 열 수 있으며, 각 쿼리가 시작될 때 연결이 되어 있는지 확인할 수 있습니다.

만약 당신이 Mac에서 나와 같이 brew를 통해 mysql을 설치했다면, 다음과 같이 작동했습니다.

  1. cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf

출처: homebrew mysql 설치의 경우 my.cnf는 어디에 있습니까?

  1. max_allowed_packet=1073741824로로 합니다./usr/local/etc/my.cnf

  2. mysql.server restart

XAMP에서도 같은 문제가 있었습니다.

Metode-01: 에서 max_allowed_packet 을 변경했습니다.D:\xampp\mysql\bin\my.ini다음과 같이 합니다.

max_allowed_packet=500M

마지막으로 MySQL 서비스를 한 번 재시작하고 종료합니다.

Metode-02:

XAMPP를 사용하다XAMPP "mysql " config " " " " 。
여기에 이미지 설명 입력

my.ini를 클릭하면 에디터에서 열립니다.max_allowed_packet을 필요한 크기로 업데이트합니다.

여기에 이미지 설명 입력

그런 다음 mysql 서비스를 재시작합니다.Mysql 서비스에서 stop을 클릭해 다시 start를 클릭합니다.몇 분간 기다립니다.여기에 이미지 설명 입력 여기에 이미지 설명 입력

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

Mysql 클러스터를 사용할 때 이 오류가 발생했는데 클러스터 사용 여부에 대한 질문인지 알 수 없습니다.오류는 똑같으니 제 해결책을 여기에 주세요.데이터 노드가 갑자기 크래쉬하기 때문에 이 오류가 발생합니다.그러나 노드가 크래시해도 cmd를 사용하여 올바른 결과를 얻을 수 있습니다.

ndb_mgm -e 'ALL REPORT MEMORYUSAGE'

mysqld도 올바르게 동작합니다.그래서 처음에는 뭐가 문제인지 이해할 수 없어요.그리고 약 5분 후 ndb_mgm 결과에는 데이터 노드가 작동하지 않습니다.그때 나는 문제를 깨달았다.따라서 모든 데이터 노드를 재시작하면 mysql 서버가 복구되고 모든 것이 정상입니다.

몇 쿼리에 후 mysql과 같은 합니다.show tables도 ''와 같은 정보를 수 33 rows in set (5.57 sec)테이블 정보는 표시되지 않습니다.

이 오류 메시지는 덤프에서 사용되는 COLATION과는 다른 COLATION을 사용하여 스키마를 작성한 경우에도 발생합니다.그래서 만약 덤프에

CREATE TABLE `mytab` (
..
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

SCHEMA 대조에도 이를 반영해야 합니다.

CREATE SCHEMA myschema COLLATE utf8_unicode_ci;

스키마에서 utf8mb4_general_ci를 사용하고 있었습니다.새로운 V8 설치에서 스크립트가 나왔기 때문에 이전 5.7에 DB가 로드되어 거의 미쳐버렸습니다.

그러면 답답한 시간을 절약할 수 있을 것 같습니다. :-)

(MacOS 10.3, mysql 5.7)

max_allowed_packet=64M로로 합니다.[mysqld]

[mysqld] 
max_allowed_packet=64M

MySQL 서버를 재시작합니다.

재접속하여 접속 ID 2를 취득하고 있는 경우, 서버는 거의 확실히 크래쉬 하고 있습니다.

서버 관리자에게 문의하여 문제를 진단하도록 합니다.악의 없는 SQL은 서버를 크래시해서는 안 되며 mysqldump 출력도 크래시해서는 안 됩니다.

서버 관리자가 아키텍처의 주소 공간 제한보다 크거나 가상 메모리 용량보다 큰 버퍼 크기를 할당하는 등의 큰 운영 오류를 범했을 수 있습니다.MySQL 에러 로그에는 관련 정보가 포함되어 있을 가능성이 있습니다.어차피 능력이 있으면 이 정보를 감시하고 있을 것입니다.

이것은 매우 드문 문제이지만, 누군가가 DB를 다른 서버로 이행하기 위해 /var/lib/mysql 디렉토리 전체를 복사한 경우 이를 볼 수 있습니다.데이터베이스가 실행 중이어서 로그 파일을 사용하고 있지 않기 때문입니다./var/log/mysql에 로그가 있으면 작동하지 않을 수 있습니다.해결책은 /var/log/mysql 파일도 복사하는 것입니다.

amazon RDS(내 경우)의 경우,max_allowed_packet파라미터 값을 바이트 단위의 수치로 설정합니다(예를 들어 삽입에 50MB의 BLOB 값이 있는 경우).max_allowed_packet64M = 67108864)까지)를 신규 또는 기존으로 설정합니다.parameter-group그런 다음 해당 파라미터 그룹을 MySQL 인스턴스에 적용합니다(인스턴스를 재부팅해야 할 수 있습니다).

DB Import 실패에 대한 솔루션을 찾고 있는 Drupal 8 사용자의 경우:

sql 덤프 파일 끝에는 "web profiler" 테이블에 데이터를 삽입하는 명령이 있습니다.이것은 디버깅 로그 파일 중 하나이며 사이트가 작동하는 데 그다지 중요하지 않기 때문에 이 모든 것을 제거할 수 있습니다.LOCK TABLES와 UNLOCK TABLES를 포함한 모든 삽입물을 삭제했습니다.SQL 파일의 맨 아래에 있습니다.문제 설명은 다음과 같습니다.

https://www.drupal.org/project/devel/issues/2723437

하지만 그 표를 잘라내는 것 말고는 그것에 대한 해결책이 없다.

그런데 위의 답변에서 모든 솔루션을 시도해 봤지만 아무것도 도움이 되지 않았습니다.

위의 모든 해결책을 시도해 봤지만 모두 실패했습니다.

나는 결국에 그것을 이용하게 되었습니다.-h 127.0.0.1디폴트를 사용하는 대신var/run/mysqld/mysqld.sock.

이러한 솔루션을 모두 사용해 본 경우, 특히,max_allowed_packet최대 지원량까지1GB이러한 에러가 아직 발생하고 있는 경우는, 서버의 빈 RAM 메모리가 문자 그대로 부족할 가능성이 있습니다.

솔루션 =은(는) 서버를 더 많은 RAM 메모리로 업그레이드한 후 다시 시도합니다.

주의: 이 스레드에 대해 8년 이상 논의한 결과 이 간단한 솔루션이 언급되지 않은 것이 놀랍습니다.때때로 우리 개발자들은 지나치게 생각하는 경향이 있다.

경고를 유발한 오류를 제거하는 것이 최종 해결책이었습니다.max_allowed_packet도 변경되어 작은 파일에도 오류가 발생하였습니다.에러를 없앰으로써, 프로세스도 비약적으로 고속화했습니다.

이 답변 중 어느 것도 문제를 해결하지 못할 경우 다음과 같은 방법으로 테이블을 삭제하고 다시 작성함으로써 해결했습니다.

when creating the backup, first backup structure and be sure of add:
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT
CREATE PROCEDURE / FUNCTION / EVENT
IF NOT EXISTS
AUTO_INCREMENT

이 백업을 DB와 함께 사용하면 필요한 테이블을 삭제하고 다시 만들 수 있습니다.

그런 다음 데이터만 백업하고 동일한 작업을 수행하면 작동합니다.

mysql 클라이언트를 다음과 같이 사용하면 어떨까요?

mysql -h <hostname> -u username -p <databasename> < file.sql

언급URL : https://stackoverflow.com/questions/10474922/error-2006-hy000-mysql-server-has-gone-away

반응형