如何更改max_allowed_pa​​cket大小

时间:2011-11-09 09:01:51

标签: mysql

我的MySQL数据库中的BLOB字段有问题 - 当上传大于1MB的文件时出现错误Packets larger than max_allowed_packet are not allowed.

以下是我的尝试:

在MySQL查询浏览器中,我运行了一个show variables like 'max_allowed_packet',它给了我1048576.

然后我执行查询set global max_allowed_packet=33554432后跟show variables like 'max_allowed_packet' - 它按预期给我33554432。

但是当我重新启动MySQL服务器时,它神奇地回到了1048576.我在这里做错了什么?

奖金问题,是否可以压缩BLOB字段?

14 个答案:

答案 0 :(得分:355)

通过在您的文件中的my.ini~/.my.cnf部分下添加一行,更改[mysqld][client]文件:

max_allowed_packet=500M

然后重启MySQL服务,你就完成了。

有关详细信息,请参阅documentation

答案 1 :(得分:191)

可以通过运行查询来全局设置max_allowed_packet变量。

但是,如果您未在my.ini文件中更改它(如建议的dragon112),则即使您全局设置,该值也会在服务器重新启动时重置。

要将每个人的最大允许数据包更改为1GB,直到服务器重新启动:

SET GLOBAL max_allowed_packet=1073741824;

答案 2 :(得分:82)

我的一个初级开发人员在修改这个问题时遇到了问题,所以我想我会为linux用户更详细地扩展它:

1)打开终端

2)ssh root @ YOURIP

3)输入root密码

4)nano /etc/mysql/my.cnf(如果命令无法识别,请先执行此操作或尝试vi然后重复:yum install nano)

5)在[MYSQLD]部分下添加行:max_allowed_pa​​cket = 256M(显然可以根据需要调整大小)。他错误地把它放在文件的底部,所以它不起作用。

enter image description here

6)Control + O(保存)然后按ENTER(确认)然后按Control + X(退出文件)

7)service mysqld restart

8)您可以在phpmyadmin上查看变量部分的更改

答案 3 :(得分:38)

我想有些人还想知道如何在PC上找到my.ini文件。对于Windows用户,我认为最好的方法如下:

  1. 赢取+ R (“运行”的快捷方式),输入 services.msc ,输入
  2. 您可以找到类似'MySQL56'的条目,右键单击它,选择属性
  3. 你可以看到像“D:/ Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld”--defaults-file =“D:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”MySQL56
  4. 我从http://bugs.mysql.com/bug.php?id=68516

    得到了这个答案

答案 4 :(得分:18)

遵循所有说明,这就是我所做的和工作:

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_pa​​cket已在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 GLOBAL max_allowed_pa​​cket = 1073741824之后,服务器将拥有新的max_allowed_pa​​cket,直到它重新启动为止,如前所述。

答案 5 :(得分:12)

如果在执行备份时遇到此错误,可以在max_allowed_packet中设置my.cnf,尤其是mysqldump

[mysqldump]
max_allowed_packet=512M

我在执行mysqldump时遇到此错误,但我不明白,因为我在my.cnf部分的[mysqld]内设置了此设置。一旦我发现我可以为[mysqldump]设置它并设置值,我的备份就完成了。

答案 6 :(得分:9)

对于那些运行wamp mysql服务器的人

Wamp托盘图标 - > 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;

答案 7 :(得分:4)

许多回答者发现了这个问题并且已经给出了解决方案。

我只想提出另一个解决方案,即从工具Mysql Workbench 中更改Glogal变量值。如果您使用Workbench在服务器上本地运行(或通过SSH连接)

,那就是当然

您只需连接到您的实例并进入菜单:

  

服务器 - >选项文件 - >网络 - > max_allowed_pa​​cked

您设置了所需的值,然后您需要重新启动MySql服务

答案 8 :(得分:3)

出现此错误是因为您的数据包含的值大于设定值。

只需写下max_allowed_packed=500M 或者您可以计算出500 * 1024k并使用它而不是500M(如果需要)。

现在只需重新启动MySQL。

答案 9 :(得分:3)

对于在Amazon RDS服务上运行MySQL的任何人,此更改都是通过parameter groups完成的。您需要创建一个新PG或使用现有PG(默认值为只读)。

您应该搜索max_allowed_packet参数,更改其值,然后点击保存。

回到你的MySQL实例,如果你创建了一个新的PG,你应该将PG附加到你的实例(你可能需要重启)。 如果您更改了已附加到实例的PG,则无需重新启动即可对所有已附加该PG的实例应用更改。

答案 10 :(得分:2)

使用 MySql Workbench 设置最大允许数据包大小并重启服务器Mysql Workbench

答案 11 :(得分:0)

如果您想在数据库中上传大尺寸图片或数据。只需将数据类型更改为'BIG BLOB'

答案 12 :(得分:0)

设置全局max_allowed_pa​​cket = 10000000000;

答案 13 :(得分:0)

在 MYSQL 5.7 中,max_allowed_packet 最多为 1G。如果你想设置为4G,它会失败,没有错误和警告。