phpMyAdmin을 통해 큰 SQL 파일을 가져 오려고했지만 오류가 계속 표시되었습니다.
'MySql 서버가 사라졌습니다'
무엇을해야합니까?
max_allowed_packet
. 약간 조잡하지만 작동하면 제정신의 가치를 찾을 수 있습니다.
phpMyAdmin을 통해 큰 SQL 파일을 가져 오려고했지만 오류가 계속 표시되었습니다.
'MySql 서버가 사라졌습니다'
무엇을해야합니까?
max_allowed_packet
. 약간 조잡하지만 작동하면 제정신의 가치를 찾을 수 있습니다.
답변:
여기에 명시된 바와 같이 :
MySQL 서버가 사라진 가장 일반적인 두 가지 이유는 다음과 같습니다 (오류 2006).
서버가 시간 초과되어 연결을 종료했습니다. 어떻게 고치는 지:
mysqld의 my.cnf 구성 파일에서 wait_timeout 변수가 충분히 큰지 확인하십시오. Debian :
sudo nano /etc/mysql/my.cnf
에서wait_timeout = 600
초를 설정하고 (2006 오류가 사라질 때이 값을 조정 / 감소 할 수 있음)을 설정하십시오sudo /etc/init.d/mysql restart
. 확인하지는 않았지만 wait_timeout의 기본값은 약 28800 초 (8 시간)입니다.서버가 잘못되었거나 너무 큰 패킷을 삭제했습니다. mysqld가 너무 크거나 부정확 한 패킷을 얻는 경우, 클라이언트에 문제가 있다고 가정하고 연결을 닫습니다. my.cnf 파일에서 max_allowed_packet의 값을 늘려 최대 패킷 크기 제한을 늘릴 수 있습니다. 데비안에서 :
sudo nano /etc/mysql/my.cnf
, 세트max_allowed_packet = 64M
(당신은 / 조정할 오류 2006 사라 경우이 값을 줄일 수 있습니다) 다음,sudo /etc/init.d/mysql restart
.
편집하다:
MySQL 옵션 파일에는 명령을 주석으로 사용할 수 없습니다 (예 : php.ini 등). 당신은에서 변경 / 비틀기를 입력해야합니다 그래서 my.cnf
나 my.ini
과에 배치 mysql/data
같은 옵션의 적절한 그룹 아래, 디렉토리 또는 다른 경로 중 하나로 [client]
, [myslqd]
등 예를 들어 :
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
그런 다음 서버를 다시 시작하십시오. 값을 얻으려면 mysql 클라이언트를 입력하십시오.
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
MySQL 쿼리 를 실행하여 볼 수 있음 ) 가져 오는 파일에 매우 큰 레코드가 있습니다. my.ini 파일 (Windows를 실행 중임)을 열고 값을 다음과 같이 설정했습니다 max_allowed_packet = 64M
.
wait_timeout
라인을 찾을 수 없습니다
나를 위해이 솔루션이 작동하지 않아서 실행했습니다.
SET GLOBAL max_allowed_packet=1073741824;
내 SQL 클라이언트에서.
MYSql 서비스가 실행중인 상태에서이를 변경할 수 없으면 서비스를 중지하고 "my.ini"파일에서 변수를 변경해야합니다.
예를 들면 다음과 같습니다.
max_allowed_packet=20M
php.ini
을 수행했습니다 (응답에서 @GBD가 제안한대로) 파일과 MySQL 구성 파일 my.ini
을 모두 수정해야 작동했습니다.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
한 클라이언트에서 설정 한 다음 .sql
다른 세션에서 큰 파일 을 가져 오면 정상적으로 작동합니다.
기본값으로 실행하는 경우 mysql 구성을 최적화 할 공간이 충분합니다.
내가 권장하는 첫 번째 단계는 max_allowed_packet을 128M으로 늘리는 것입니다.
그런 다음 MySQL Tuning Primer 스크립트를 다운로드하여 실행하십시오. 성능 향상을 위해 구성의 여러 측면에 권장 사항을 제공합니다.
또한 MySQL과 PHP에서 시간 초과 값을 조정하는 방법을 살펴보십시오.
가져 오는 파일의 크기 (파일 크기)는 어느 정도이며 PHPMyAdmin 대신 mysql 명령 줄 클라이언트를 사용하여 파일을 가져올 수 있습니까?
이 짧은 /etc/mysql/my.cnf 파일로 문제를 해결했습니다.
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
이것이 발생할 수있는 다른 이유는 메모리가 부족하기 때문입니다. / var / log / messages를 확인하고 mysqld가 컴퓨터보다 많은 메모리를 할당하도록 my.cnf가 설정되어 있지 않은지 확인하십시오.
mysqld 프로세스는 실제로 커널에 의해 종료 된 후 "safe_mysqld"프로세스에 의해 다시 시작될 수 있습니다.
헤드 룸이 무엇인지 확인하기 위해 top을 사용하고 실행중인 메모리 할당을 확인하십시오.
my.cnf를 변경하기 전에 백업하십시오.
16GB SQL 파일을 가져올 때이 오류 및 기타 관련 오류가 발생했습니다. 나를 위해, my.ini를 편집하고 [mysqld] 섹션에서 다음을 설정합니다 (여러 개의 다른 게시물을 기반으로 함).
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Windows에서 실행중인 경우 제어판, 서비스로 이동하여 MySQL의 세부 사항을보고 my.ini가있는 위치를 확인하십시오. 그런 다음 my.ini를 편집하고 저장 한 후 mysql 서비스를 다시 시작하십시오 (또는 컴퓨터를 다시 시작하십시오).
HeidiSQL을 사용하는 경우이를 사용하여 이들 중 일부 또는 전부를 설정할 수도 있습니다.
데이터에 데이터가 포함 된 BLOB
경우 :
커맨드 라인에서 데이터를 가져 오면 BLOB 데이터가 질식되어 'MySQL 서버가 사라졌습니다'라는 오류가 발생합니다.
이를 피하려면 다음 --hex-blob
플래그를 사용하여 mysqldump를 다시 작성하십시오 .
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
다른 텍스트 사이에서 이진이 아닌 16 진 값으로 데이터 파일을 작성합니다.
PhpMyAdmin에는 "16 진수 표기법으로 이진 열 덤프 (예 :"abc "가 0x616263가 됨)"옵션도 있습니다.
GEOM
열이 변환되지 않았 음 을 의미하는 버그 (2015 년 12 월 현재)가 있습니다.
mysqldump를 사용하여 GEOMETRY 열이있는 테이블을 백업 하시겠습니까?
따라서 PhpMyAdmin과 같은 프로그램을 사용하는 것이 유일한 해결 방법 인 것 같습니다 (위에서 언급 한 옵션은 GEOM 열을 올바르게 변환합니다).
오랜 시간 동안 데이터를 많이 사용하기 위해 mysql 연결과 관련된 대규모 계산을 수행하고 있습니다. 나는이 "Mysql go away issue"에 직면했다. 그래서 쿼리를 최적화하지 않았지만 도움이되지 못했습니다. 기본적으로 mysql 변수 제한이 더 낮은 값으로 설정되었습니다.
wait_timeout max_allowed_packet
당신에게 맞는 것을 제한하려면 Any Number * 1024 (Bytes)가되어야합니다. ' mysql -u username-p '명령을 사용하여 터미널에 로그인 할 수 있으며 이러한 변수 제한을 확인하고 변경할 수 있습니다.
GoDaddy 공유 호스팅 계정에서 PHP.ini 등 파일을 조정하는 것은 까다 롭습니다. 그러나 다른 방법이 있으며 그것은 나를 위해 완벽하게 작동했습니다. (방금 3100 행과 145 열을 포함하는 3.8Mb .sql 텍스트 파일을 성공적으로 업로드했습니다. phpMyAdmin의 IMPORT 명령을 사용하여 겁에 질린 MySQL 서버에 오류가 발생하여 더 이상 정보가 없습니다.)
나는 Matt Butcher가 정답을 가지고 있음을 발견했다. Matt와 마찬가지로, MySQL 데이터베이스를 한 입 크기의 덩어리로 내보내는 것에서부터 큰 수입을 작은 것으로 나누는 스크립트 작성에 이르기까지 모든 종류의 트릭을 시도했습니다. 그러나 여기에 효과가 있습니다.
(1) CPANEL ---> 파일 (그룹) ---> 백업
(2a) "부분 백업"제목에서 ...
(2b) "MySQL 데이터베이스 백업 다운로드"에서
(2c) 데이터베이스를 선택하고 백업을 다운로드합니다 (이 단계는 선택이지만 현명합니다)
(3a) "MySQL 데이터베이스 백업 복원"이라는 제목 아래 2b의 바로 오른쪽에 있습니다.
(3b) 로컬 드라이브에서 .SQL 가져 오기 파일을 선택하십시오.
(3c) 진정한 행복은 당신입니다. 5 초
이 방법을 사용하여 단일 테이블을 가져올 수있었습니다. 내 데이터베이스의 다른 것은 영향을받지 않았습니다. 그러나 위의 2 단계는 보호 대상입니다.
주의 사항 :
가. .SQL 가져 오기 파일을 작성하는 방법을 잘 모르면 phpMyAdmin을 사용하여 테이블을 내보내고 해당 파일 구조를 수정하십시오.
출처 : Matt Butcher 2010 기사
max_allowed_packet
도움이되지 않습니다..sql
Sequel Pro를 통해 파일을 데이터베이스로 가져올 때와 같은 오류가 발생했습니다 .
max_allowed_packet
to를 올린 후에도 오류가 계속 발생 512M
하여 대신 명령 줄에서 가져 오기를 실행했습니다.
mysql --verbose -u root -p DatabaseName < MySQL.sql
다음과 같은 오류가 발생했습니다.
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
몇 가지 유용한 StackOverflow 질문을 찾았습니다.
제 경우에는 제 .sql
파일이 약간 손상되었거나 무언가였습니다. 우리가 얻는 MySQL 덤프는 함께 연결 한 다음 압축을 풀어야하는 두 개의 zip 파일로 제공됩니다. 압축 해제는 처음에 중단되어 파일에 이상한 문자와 인코딩이 남아 있다고 생각합니다. 새로운 MySQL 덤프를 가져 와서 압축을 풀면 제대로 작동했습니다.
다른 사람들이 max_allowed_packet
변수 를 늘리는 것이 도움이되지 않는다는 것을 알기 위해 여기에 이것을 추가하고 싶었습니다 .
패킷 크기 또는 시간 초과와 관련된 솔루션은 아무런 차이가 없었습니다. SSL을 비활성화해야했습니다.
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
나는 같은 문제가있다
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
phpmyadmin의 \ xampp \ mysql \ bin \ my.ini 파일에는
[mysqldump]
max_allowed_packet=110M
이것은 단지 mysqldump -u root -p dbname입니다. 위의 코드를 다음으로 바꾸어 문제를 해결했습니다.
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M