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.