MySQL : 통신 패킷 읽기 오류


14

나는 mysql 에서이 경고를 받는다.

[Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets)

나는 구글에서 몇 가지 주제를 겪어 왔으며 일부 제안에 따르면 여전히 동일한 행동 max_allowed_packet에서 증가했다 128 to 512 to 1024.

내가 드루팔 7을 사용하고, 그래 BLOB 데이터 유형 많이 있습니다,하지만 1024 Mb의는 max_allowed_packet내 의견으로는 충분합니다.

이 경고를 극복하는 방법이 있습니까?

편집하다:

@Rolando의 제안 / 답변으로 일부 설정을 추가했지만 여전히 동일한 경고가 표시됩니다.

내 MySQL 설정은 다음과 같습니다

[client]
port        = 3306
socket      = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K 
max_allowed_packet = 1024M 
table_open_cache = 128 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 192K
# Query cache disabled
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 100
thread_concurrency = 10
tmp_table_size = 128M
max_heap_table_size = 128M
log_error                = /var/log/mysql/mysql-error.log
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2

log_warnings = 2

server-id   = 1
binlog-format = row
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin
log-slave-updates
relay-log=mysqld-relay-bin
expire_logs_days        = 10
max_binlog_size         = 100M

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 8G
character-set-server = utf8
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 2047M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
default-character-set = utf8

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 32M

[mysqlhotcopy]
interactive-timeout

[mysqld_save]
syslog

내 응용 프로그램은 InnoDB 만 사용하지만 표준 mysql 설치와 함께 제공되는 mysql과 같은 데이터베이스는 거의 없습니다 .MyISAM 엔진 유형을 사용하는 것뿐입니다. 그렇지만 걱정하지 않아도됩니다.

보시다시피 복제가 있음을 알 수 있듯이 경고는 복제 서버의 경고와 동일하며 구성은 이것과 동일합니다.


모든 테이블이 InnoDB입니까?
RolandoMySQLDBA

@RolandoMySQLDBA, 안녕하세요, 예, 모든 테이블은 innodb입니다.이 웹 사이트에서 이와 같은 다른 질문에 대한 귀하의 답변에 따라 수행했지만 여전히 경고가 표시됩니다.

@RolandoMySQLDBA, 내 질문을 편집하고 제안한 것을 수행했지만 여전히 경고 메시지가 나타납니다. 여기에 mysql.cnf가 있습니다. 살펴보실 수 있습니다. 뭔가

Drupal 6과 함께 MySQL 5.5.35에서이 오류가 발생하기 시작했습니다. 문제를 이해하지 못했지만 5.7.7로 업그레이드 할 때 사라졌습니다. 이제 5.7.9로 돌아 왔습니다. 5.7.7에서 성공하지만 5.7.9에서 중단을 일으키는 삽입 쿼리 (6000 문자 미만)를 격리했습니다. 로컬이 아닌 원격으로 실행될 때만 실패합니다. 따라서 같은 클라이언트에서 동일한 클라이언트, 두 버전의 서버가 동일한 컴퓨터, 동일한 sql_mode, 동일한 문자 집합, 거대한 max_allowed_packet에서 실행됩니다. 여우 야 이 문제를 해결 한 적이 있습니까?
user19292

답변:


10

경우 : 나는 당신이 내가 같은 대답 다음 수 있도록 데이터가 InnoDB의 모든 말했다 기뻐요 의 max_allowed_packet이 보기에 정말 두 곳이, 1G에서 끝나가하고 여전히 문제가있다 :

  1. innodb_log_buffer_size : InnoDB가 디스크의 로그 파일에 쓰는 데 사용하는 버퍼 크기 (바이트)입니다. 기본값은 8MB입니다. 큰 로그 버퍼를 사용하면 트랜잭션을 커밋하기 전에 디스크에 로그를 쓰지 않아도 큰 트랜잭션을 실행할 수 있습니다. 따라서 큰 트랜잭션이있는 경우 로그 버퍼를 크게하면 디스크 I / O가 절약됩니다.
  2. innodb_log_file_size : 로그 그룹에있는 각 로그 파일의 크기 (바이트)입니다. 결합 된 로그 파일 크기는 4GB보다 작아야합니다. 기본값은 5MB입니다. 감지 가능한 값의 범위는 버퍼 풀 크기의 1MB-1 / N이며, 여기서 N은 그룹의 로그 파일 수입니다. 값이 클수록 버퍼 풀에 필요한 검사 점 플러시 작업이 줄어들어 디스크 I / O가 절약됩니다. 그러나 로그 파일이 크면 충돌시 복구 속도가 느려집니다.

약 2 년 전과 같은 문제를 해결했습니다.

제안

InnoDB 트랜잭션 로그늘려야합니다 . 다음은 innodb_log_buffer_sizeinnodb_log_file_size 를 안전하게 늘리는 단계입니다 .

01 단계 : 다음에 추가 /etc/my.cnf

[mysqld]
innodb_log_buffer_size = 32M
innodb_log_file_size = 2047M

단계 02 : 이것을 mysql에서 실행

mysql> SET GLOBAL innodb_fast_shutdown = 0;

03 단계 : MySQL 종료

service mysql stop

04 단계 : 이전 로그를 옆으로 이동

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

05 단계 : MySQL 시작

service mysql start

그게 다야.

InnoDB 인프라에는 이제 다른 크기의 BLOB에 대한 충분한 로깅 공간이 있어야합니다.

시도 해봐 !!!


응답에 대해 대단히 감사 mysql.cnf합니다. 파일 을 추가하기 위해 내 질문을 편집했습니다 . 나는 당신이 제안한대로했지만 여전히 경고를받습니다. 내가 볼 수 max_allowed_packet있는 mysqldump그냥 16Mb하지만 난 그 원인이 아닌 것 같아요. 그것은 key_buffer_size단지 16Kb무언가와 함께 있어야하며 응용 프로그램에서 스토리지 엔진을 MyISAM사용하지 않습니다 MyISAM.

또한-아파치 서버로 작업하는 동안이 문제가 발생하면 해당 서비스를 다시 시작해야했습니다. 이것에 대해 대단히 감사합니다-나는 우둔했습니다.
dgo

1

이 오래된 질문에 대한 '16 년 1 월 @ user19292의 의견을 읽은 후 5.7.9에서 5.7.12로 업그레이드하고 문제가 해결되었습니다.


2
나는 5.7.23을 사용하고 있으며 같은 문제가 있습니다
Jesus Uzcanga

1
여기에서도 5.7.26의 오류가 발생합니다. 귀하의 경우 업그레이드로 구성을 재설정 할 수도 있으므로 문제가 해결되었을 수 있습니다.
Sliq

0

방금 옵션을 변경하고 다른 버전의 MySQL을 시도하는 데 약 5-6 시간을 보냈지 만 항상 오류가 발생했습니다.

나는 그것이 더 이상하다고 생각합니다.

  • 내 PHP 코드가 DB 연결 (오류가 아니라 경고) mysql_close()또는 이와 동등한 것을 올바르게 닫지 않았습니다 .
  • 또는 클라이언트가 연결을 닫으면 nginx 캐시 / 프록시 서버가 연결을 닫도록 구성되어 있기 때문에 캐시 / 프록시 서버는 원본 서버 (mysql도 포함)를 기다리지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.