[mysql] max_allowed_packet 크기를 변경하는 방법

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 필드를 압축 할 수 있습니까?



답변

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

max_allowed_packet=500M

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

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


답변

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

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

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

SET GLOBAL max_allowed_packet=1073741824;


답변

저의 중급 개발자 중 한 명이 나를 위해 이것을 수정하는 데 문제가 있었으므로 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의 변수 섹션에서 변경 사항을 확인할 수 있습니다


답변

일부는 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 에서이 답변을 받았습니다.


답변

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

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을 갖게됩니다.


답변

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

[mysqldump]
max_allowed_packet=512M

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


답변

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;