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 사용자의 경우 가장 좋은 방법은 다음과 같습니다.
- Win + R ( ‘실행’바로 가기), services.msc 입력, Enter
- ‘MySQL56’과 같은 항목을 찾을 수 있습니다. 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.
- “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;