오류 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)를 사용합니다.tcpdump
MySQL 통신을 스니핑합니다(소켓 연결에는 작동하지 않습니다). §: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 파일을 해야 합니다.
다른 사람의 권고에 따라 /etc/my.cnf를 작성했습니다.내용은 다음과 같습니다.
[mysql] connect_timeout = 43200 max_allowed_packet = 2048M net_buffer_length = 512M debug-info = TRUE
" " "
--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_timeout
및connect_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을 설치했다면, 다음과 같이 작동했습니다.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
출처: homebrew mysql 설치의 경우 my.cnf는 어디에 있습니까?
max_allowed_packet=1073741824
로로 합니다./usr/local/etc/my.cnf
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_packet
64M = 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
'programing' 카테고리의 다른 글
Java 메서드 선언의 최대 매개 변수 수 (0) | 2022.12.20 |
---|---|
조인 상위 3개 항목 가져오기 (0) | 2022.12.20 |
각 Angular 프로젝트에서 생성되는 파일 수가 엄청납니다. (0) | 2022.12.20 |
PDO PHP에서 쿼리 오류를 보는 방법 (0) | 2022.12.20 |
mysql ERROR 1062 (23000) 해결 방법:키 'UK_ability_shortname'에 대한 항목 ''이(가) 중복됩니다. (0) | 2022.12.20 |