max_allowed_pa​​cket值是否有最大限制?

时间:2011-06-02 15:08:32

标签: mysql drupal

我正在运行一个drupal网站。我的网站出现错误用户警告:收到的数据包大于'max_allowed_pa​​cket'字节查询。我设置的值高达128M。即使报告了相同的错误。

这里有什么问题?为什么不起作用?

max_allowed_pa​​cket值是否有最大限制?

7 个答案:

答案 0 :(得分:6)

这是前沿: 设置全局max_allowed_pa​​cket = 1073741824;

虽然在你的情况下把它设置得那么高可能不是一个好主意。

作为旁注,我遇到了mysqldump的这个错误,并设置此最大值没有帮助。这样就可以了:$ mysqldump --max_allowed_pa​​cket = 999M -u root -p table_name>为table_name.sql

答案 1 :(得分:3)

通常这可能是因为变量实际上没有生效 - 你进行了配置更改,但是错误的my.cnf,或者你忘了弹出应用程序等等。

检查正在运行的mysql实例的一种简单方法是在shell中执行以下操作:

  

mysqladmin变量-u root -p

并输入您的root密码。这将转储所有当前变量(包括max_allowed_pa​​cket),并允许您验证它的设置。如果它被设置为128M并且你仍然在窒息它,那么你需要增加它 - 但它不太可能。

答案 2 :(得分:1)

修改/etc/my.cnf,添加max_allowed_packet变量。

它应该是这样的:

[mysqld]
max_allowed_packet=1000000000

然后重新启动服务器。

答案 3 :(得分:1)

首先,您需要在 my.cnf 文件中将max_allowed_pa​​cket设置为128M。

要找到它,请在命令行中使用“locate my.cnf”命令。

文件应如下所示:

#
!includedir /etc/my.cnf.d
#max_allowed_packet = 1024M
[mysqld]
port            = 3306
            key_buffer_size = 256M
#           max_allowed_packet = 100M
            table_open_cache = 256
            sort_buffer_size = 1M
            read_buffer_size = 1M
            read_rnd_buffer_size = 4M
            myisam_sort_buffer_size = 64M
            thread_cache_size = 8
            query_cache_size= 16M
            thread_concurrency = 8
            bind-address    = 202.90.158.47
            # skip-networking
log = /var/log/mysql.access.log
log-error = /var/log/mysql.error.log
wait_timeout = 1

[mysqldump]
#max_allowed_packet     = 101M

请务必取消注释(删除max_allowed_pa​​cket = 128M行之前的#符号)

最后,使用命令“/etc/init.d/mysqld restart”重启你的sql

应该做的伎俩。 :d

答案 4 :(得分:0)

尝试将max_allowed_packet = 128M设置为 my.cnf [mysqld]类别下的最后一个选项。

当我把它作为第一个选项时,它不起作用,但当我把它作为最后一个选项时,它起作用了!我认为这是因为其他一些变量超出了max_allowed_packet

更改 my.cnf 后,使用sudo service mysql restart重启MySQL,然后使用SHOW VARIABLES LIKE 'max_allowed_packet';检查设置

答案 5 :(得分:0)

您需要在适用于您正在执行的操作的所有部分中设置设置,并始终在[MySQLd]部分中。该设置适用于您正在使用的元素的缓冲区。所以在[MySQLd]下是你的MySQL服务器处理程序deamon on linux / service on windows。如果您想使用MySQLDump进行转储,请在命令行中将其添加为参数,或者在my.ini中创建一个[MySQLDump]部分以及此工具使用相同的参数使其永久化。如果你想再次使用MySQL再次导入转储,请使用命令行中的参数或在my.ini中再次使用相同参数创建[MySQL]部分,以便为此工具选择永久选择。

我继续谈论my.ini,因为我在Windows上,但在Linux上,当然是my.cnf。

我决定在这里解释一下,因为我花了很长时间才弄清楚这一点,因为它没有在任何地方解释。在示例中,我注意到一些ppl在多个部分下进行了设置,所以我开始更多地进行谷歌搜索,并发现各部分之间的相关性以及他们所做的操作。现在我再也不会遇到这个问题了,大多数情况下都不需要这里提到的128M高的设置。但是,因为它是服务器将用于此缓冲区的最大值,如果您将内存设置为足以让您的操作永远不会遇到麻烦。实际需要的大小比数据库中的最大记录大一点。

答案 6 :(得分:0)

我在使用带有LONGBLOB字段的mysqldump时遇到了这个错误,并且设置此最大值没有帮助。这就是诀窍:

$ mysqldump --max_allowed_packet=999M -u root -p table_name > table_name.sql