2011-06-02 147 views
6

我正在运行一个drupal站点。我在我的网站中遇到错误用户警告:收到的数据包大于'max_allowed_pa​​cket'字节查询。我已经设置了高达128M的值。即使在报告同样的错误之后。值max_allowed_pa​​cket有最大限制吗?

这里有什么问题?为什么它不工作?

值max_allowed_pa​​cket有最大限制吗?

+1

可能的共享原因:http://stackoverflow.com/questions/93128/mysql-got-a-packet-bigger-than-max-allowed-packet-bytes – 2011-06-02 15:11:28

+1

您是否100%确定您已将max_allowed_pa​​cket设置为128 megs?通常,如果一个程序抱怨没有设置的东西 - 通常表示用户搞砸了。你是如何设置max_allowed_pa​​ckts的? – 2011-06-02 15:11:57

+1

看来这个变化没有得到体现。我在/etc/my.cnf文件中添加了max_allowed_pa​​cket = 128M。 但是,当我运行命令_ “显示变量,如 'max_allowed_pa​​cket的%';” _如 _max_allowed_pa​​cket 1048576_ 我试图从MySQL控制台中设置它 _mysql>设置max_allowed_pa​​cket的获得输出= 134216704; _ 但是,当我重新启动并再次检查设置变量是回到1048576. 如何设置max_allowed_pa​​cket永久? – 2011-06-03 09:43:52

回答

3

通常,这可以通过变量不是实际上正在效应 - 您进行配置更改引起的,但在错误的my.cnf,或者你忘了反弹的应用等

一个简单的方法来检查正在运行的MySQL实例是做这样的事情在shell:

中mysqladmin -u变量根-p

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

+0

我在/etc/my.cnf中所做的更改没有得到体现。当我运行_mysqladmin变量时,-u root -p_max_allowed_pa​​cket被获得为1048576.从MySQL控制台进行的更改正在生效。但是,当MySQL重新启动时,max_allowed_pa​​cket会返回到1048576 – 2011-06-03 09:52:18

+0

我们面临同样的问题,任何解决方案都有 – Mohsin 2016-04-07 10:49:28

1

编辑您的/etc/my.cnf,添加max_allowed_packet变量。

它应该是这样的:

[mysqld] 
max_allowed_packet=1000000000 

然后重新启动服务器。

5

这是出血性的边缘: set global max_allowed_pa​​cket = 1073741824;

虽然,在您的情况下设置它可能不是一个好主意。

作为附注,我遇到了mysqldump的这个错误,并且设置这个最大值并没有帮助。这奏效了:$ mysqldump的--max_allowed_pa​​cket = 999Mü根 - P表名>为table_name.sql

1

第一个是你需要设置max_allowed_pa​​cket的为128M在的my.cnf文件

找到它,请在命令行中使用“找到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行之前删除#符号)

最后,使用命令重新启动SQL“的/ etc/init.d/mysqld restart“

应该这样做。 :d

0

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

当我把它作为第一个选项时,它不起作用,但是当我把它作为最后一个选项时,它就起作用了!我认为这是因为其他一些变数被覆盖max_allowed_packet

改变my.cnf中后,重启MySQL使用sudo service mysql restart,并检查使用SHOW VARIABLES LIKE 'max_allowed_packet';

0

您需要设置的设置中,适用于你正在做的动作所有部分的设置,并始终将[ MySQLd]部分。该设置适用于您正在使用的元素的缓冲区。因此,在[MySQLd]下为您的MySQL服务器处理deamon linux/service上的窗口。如果你想用MySQLDump创建一个转储文件,可以在命令行中添加它作为参数,或者在my.ini中创建一个[MySQLDump]部分,并使用相同的参数使其永久生效。如果要再次使用MySQL再次导入转储,请使用命令行中的参数,或者在my.ini中再次使用相同的参数来创建一个[MySQL]部分,以使此工具的选择永久化。

我一直在谈论my.ini,因为我在windows上,但是在Linux上,这是my.cnf当然。

我决定在这里解释它,因为它花了我很多时间来解决这个问题,因为它没有解释任何地方。然而在例子中,我注意到一些ppl在多个部分下设置,所以我开始更多的谷歌,并发现部分之间的相关性和他们在做什么。现在我再也没有这个问题了,在大多数情况下,这里提到的128M的设置并不需要。但是,如果你的内存设置得足够高以至于不会对你的操作产生麻烦,那么这是服务器用于这个缓冲区的最大值。实际需要的大小比数据库中最大的记录大一点。

相关问题