我正在运行一个drupal网站。我的网站出现错误用户警告:收到的数据包大于'max_allowed_packet'字节查询。我设置的值高达128M。即使报告了相同的错误。
这里有什么问题?为什么不起作用?
max_allowed_packet值是否有最大限制?
答案 0 :(得分:6)
这是前沿: 设置全局max_allowed_packet = 1073741824;
虽然在你的情况下把它设置得那么高可能不是一个好主意。
作为旁注,我遇到了mysqldump的这个错误,并设置此最大值没有帮助。这样就可以了:$ mysqldump --max_allowed_packet = 999M -u root -p table_name>为table_name.sql
答案 1 :(得分:3)
通常这可能是因为变量实际上没有生效 - 你进行了配置更改,但是错误的my.cnf,或者你忘了弹出应用程序等等。
检查正在运行的mysql实例的一种简单方法是在shell中执行以下操作:
mysqladmin变量-u root -p
并输入您的root密码。这将转储所有当前变量(包括max_allowed_packet),并允许您验证它的设置。如果它被设置为128M并且你仍然在窒息它,那么你需要增加它 - 但它不太可能。
答案 2 :(得分:1)
修改/etc/my.cnf
,添加max_allowed_packet
变量。
它应该是这样的:
[mysqld]
max_allowed_packet=1000000000
然后重新启动服务器。
答案 3 :(得分:1)
首先,您需要在 my.cnf 文件中将max_allowed_packet设置为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_packet = 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