max_allowed_packet 크기를 변경하는 방법


317

MySQL 데이터베이스의 BLOB 필드에 문제가 있습니다. 약 1MB보다 큰 파일을 업로드 할 때 오류가 발생합니다 Packets larger than max_allowed_packet are not allowed.

내가 시도한 것은 다음과 같습니다.

MySQL Query Browser에서 show variables like 'max_allowed_packet'1048576을 제공 하는 a 를 실행했습니다 .

그런 다음 쿼리 실행 set global max_allowed_packet=33554432다음을 show variables like 'max_allowed_packet'- 예상대로 나에게 33,554,432을 제공합니다.

그러나 MySQL 서버를 다시 시작하면 마술처럼 1048576으로 돌아갑니다. 여기서 내가 뭘 잘못하고 있습니까?

보너스 질문, BLOB 필드를 압축 할 수 있습니까?


1
BLOB 필드는 이진 큰 개체입니다. 그것은 단지 비트입니다. 따라서 예, 내용을 압축 할 수 있으며 BLOB 필드에 저장하는 다른 (그리고 희망적으로는) 비트를 대신 제공합니다. 입력 한 데이터 만 변경됩니다. BLOB 내용을 다시 필요할 때 압축을 풀어야합니다.
Konerak

고마워요, mysql에 압축 기능 빌드가 존재하기를 바랐습니다
Muleskinner

답변:


407

파일의 한 줄 아래 또는 섹션 을 포함 하여 my.ini또는 ~/.my.cnf파일을 변경 하십시오.[mysqld][client]

max_allowed_packet=500M

그런 다음 MySQL 서비스를 다시 시작하면 완료됩니다.

자세한 내용은 설명서 를 참조하십시오 .


1
ini 파일을 수동으로 수정하지 않고도 가능할 것으로 기대했지만 감사는 효과가있는 것 같습니다.
Muleskinner

63
참고 독자 여러분, 이것은 또한 "MySQL이 사라졌습니다"오류에 대한 해결책입니다
djb

1
@Konerak, 도발자는 누구입니까?
Pacerier

14
누군가에게 답변을 제공 한 다음 Google에서 답변을 확인해야한다고 말하는 것은 무의미 해 보입니다. 특히 SO는 괜찮은 프로그래밍 관련 질문에 대한 몇 가지 최고 결과를 차지합니다. 무한 루프 프로그래밍에 대해 이야기하십시오 !!! Google> SO> Google> SO> Google> SO 등.
힐 힐리

5
아래에 [mysqld]있고 [mysql]매우 유사 하지 않아야 합니다. 몇 분의 헤드 스크래칭 비용이 들었습니다.
Halvor Holsten Strand

225

의 max_allowed_packet의 변수는 쿼리를 실행하여 전 세계적으로 설정할 수 있습니다.

그러나 my.ini파일 에서 파일을 변경하지 않으면 (dragon112에서 제안한대로) 전역으로 설정하더라도 서버를 다시 시작할 때 값이 재설정됩니다.

서버가 다시 시작될 때까지 모든 사람의 최대 허용 패킷을 1GB로 변경하려면 다음을 수행하십시오.

SET GLOBAL max_allowed_packet=1073741824;

7
도움이되지 않습니다 :(. "Query OK, 0 rows rows (0.00 sec)"
artnikpro

15
@artnikpro 그것은 작동합니다, "질의 확인, 0 행 영향을 (0.00 초)"오해의 소지가 있지만 맞습니다.
AnnTea

10
나를 위해 작동하지 않습니다. SHOW VARIABLES WHERE variable_name = 'max_allowed_packet'여전히 오래된 가치를 보여줍니다
Poma

50
max_allowed_packet이 기존 연결에 대해 변경되지 않기 때문에 이전 값을 표시합니다. 연결을 끊었다가 다시 연결하면 업데이트 된 값이 표시됩니다.
Matt Crinklaw-Vogt

2
Matt Crinklaw-Vogt가 옳습니다. 그것은 종료하고 다시 연결해야합니다
makriria

89

저의 중급 개발자 중 한 명이 나를 위해 이것을 수정하는 데 문제가 있었으므로 Linux 사용자를 위해 이것을 더 자세하게 확장 할 것이라고 생각했습니다.

1) 열린 터미널

2) ssh root @ YOURIP

3) 루트 비밀번호를 입력하십시오

4) nano /etc/mysql/my.cnf (명령이 인식되지 않으면 먼저 이것을 시도하거나 vi를 시도한 다음 반복하십시오 : yum install nano)

5) [MYSQLD] 섹션 아래에 max_allowed_packet = 256M (분명히 원하는 크기 조정) 행을 추가하십시오. 그는 파일의 맨 아래에 파일을 놓는 실수를하여 작동하지 않았습니다.

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

6) Control + O (저장), ENTER (확인), Control + X (파일 종료)

7) 서비스 mysqld 재시작

8) phpmyadmin의 변수 섹션에서 변경 사항을 확인할 수 있습니다


이것은 실제로 CentosOS6에서 이루어졌지만, 물론 루트 ssh 액세스를 사용하지 않는 것에 동의합니다.
naw103

@tamasd 내가 생산 (데비안 8에 CentOS 6 등) 사용했던 것을 몇 GNU / 리눅스 배포판 sudo: command not found또는 this incident will be reported하나 때문에이 sudo설치 및 구성되지 않았습니다. sudo처음 설정하는 방법으로이 답변을 어지럽히는 것이 더 좋 습니까?
Damian Yerrick

root ssh는 문제가 아니지만 비밀번호 로그인입니다. sudo 권한이있는 사용자 계정은 root만큼 안전하지 않습니다. SSH 키 기반 인증 만 사용하십시오.
마틴 슈나이더

기계에 로그인하는 방법에 관한 문제는 OT이며, 그는 자신의 레시피에서 어떤 방식 으로든 로그인해야한다고 올바르게보고했습니다.
devsmt

41

일부는 PC에서 my.ini 파일을 찾는 방법을 알고 싶어한다고 생각합니다. Windows 사용자의 경우 가장 좋은 방법은 다음과 같습니다.

  1. Win + R ( '실행'바로 가기), services.msc 입력, Enter
  2. 'MySQL56'과 같은 항목을 찾을 수 있습니다. 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.
  3. "D : / Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld"와 같은 sth를 볼 수 있습니다. --defaults-file = "D : \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"MySQL56

http://bugs.mysql.com/bug.php?id=68516 에서이 답변을 받았습니다.


2
이것은 Windows에서 중요합니다. MySQL을 서비스로 사용하고 Workbench에서 my.ini를 편집 한 결과이 서비스로 MySQL이 다른 my.ini를 사용하고 Workbench에서 편집 한 my.ini를 사용한다는 것을 알았습니다.
Robert Niestroj

20

모든 지시 사항을 따르면 이것이 내가 한 일입니다.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

보시다시피 max_allowed_packet은 my.ini 외부에서 변경되었습니다.

세션을 종료하고 다시 확인하십시오.

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query


Now I will start the server
2016-02-03 10:31:54 - Server is running


C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

결론 SET SET GLOBAL max_allowed_packet = 1073741824 이후에 누군가가 이전에 언급했듯이 서버는 재시작 될 때까지 새로운 max_allowed_packet을 갖게됩니다.


13

백업을 수행하는 동안이 오류가 발생 max_allowed_packet하면 my.cnf특히에 대해 설정할 수 있습니다 mysqldump.

[mysqldump]
max_allowed_packet=512M

a를 수행하는 동안이 오류가 계속 발생했으며 섹션 아래 mysqldump에이 세트가 있기 때문에 이해하지 못했습니다 . 일단 내가 그것을 설정할 수 있고 값을 설정하면 백업이 문제없이 완료되었습니다.my.cnf[mysqld][mysqldump]


10

wamp mysql 서버를 실행하는 사람들을 위해

스탬프 트레이 아이콘-> MySql-> my.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

찾을 때까지 끝까지 스크롤

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

사이 에 packet_size 줄을 추가하십시오

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

이 쿼리와 함께 작동했는지 확인

Select @@global.max_allowed_packet;

5

이 오류는 데이터에 설정된 값보다 큰 값이 포함되어 있기 때문에 발생합니다.

그냥 적어 max_allowed_packed=500M 두거나 500 * 1024k를 계산하고 원하는 경우 500M 대신 사용할 수 있습니다.

이제 MySQL을 다시 시작하십시오.


2
/etc/my.cnfMySQL의 예를 들면, 또는 /etc/my.cnf.d/server.cnfMariaDB에 대한
에브 게니 레베 데프

5

많은 답변자들이 문제를 발견하고 이미 해결책을 제시했습니다.

도구 Mysql Workbench에서 Glogal 변수 값을 변경하는 다른 솔루션을 제안하고 싶습니다 . 서버에서 로컬로 실행되는 (또는 SSH 연결을 통해) Workbench를 사용하는 경우 물론

인스턴스에 연결하고 메뉴로 이동하십시오.

서버-> 옵션 파일-> 네트워킹-> max_allowed_packed

원하는 값을 설정 한 다음 MySql Service다시 시작 해야합니다 .


4

Amazon RDS 서비스에서 MySQL을 실행하는 모든 사람은이 변경이 파라미터 그룹을 통해 수행됩니다 . 새 PG를 작성하거나 기존 PG를 사용해야합니다 (기본값 이외의 읽기 전용).

max_allowed_packet매개 변수를 검색 하고 값을 변경 한 후 저장을 누르십시오.

MySQL 인스턴스로 돌아가서 새 PG를 생성 한 경우 PG를 인스턴스에 연결해야합니다 (재부팅이 필요할 수 있음). 인스턴스에 이미 연결된 PG를 변경 한 경우 재부팅하지 않고 변경 사항이 해당 PG가 연결된 모든 인스턴스에 적용됩니다.


0

데이터베이스에 큰 크기의 이미지 또는 데이터를 업로드하려는 경우 데이터 유형을로 변경하십시오 'BIG BLOB'.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.