为什么mysql max_allowed_pa​​cket会自动重置为1m

时间:2015-03-11 06:03:00

标签: mysql

我设置

SET GLOBAL max_allowed_packet=16777216; 

以及

[mysqld]
max_allowed_packet = 16M

我通过以下命令检查了max_allowed_pa​​cket

SHOW VARIABLES LIKE 'max_allowed_packet';

,值为= 16777216

但是几天后max_allowed_pa​​cket会自动重置为1M。

6 个答案:

答案 0 :(得分:6)

我很确定你被黑了。我好几个月都有同样的问题。我打开了general_log,最后找到了一些代码:

   connect root@someipaddress on
   Query select 0x4D5A900..........(verylong)
   Query select sys_exe('cmd /c  c:/windows/nbvqc4.vbs')
   .........
   set global max_allowed_packet 1024
   ........

建议:更改root密码。

答案 1 :(得分:1)

MySQL既有GLOBAL变量,也有SESSION变量,以及my.cnf。

GLOBAL变量在启动时从my.cnf初始化,并且许多变量在连接时从GLOBAL值获取并复制到SESSION中。如果更改GLOBAL值,则SESSION会保留它自己的值 - 但任何新会话都将采用新的GLOBAL默认值。

似乎你在设置GLOBAL变量和更新my.cnf方面做了正确的事情,但在你的例子中你运行了“SHOW VARIABLES”,它返回了SESSION值。因此,在这种情况下你可能没有检查正确的值。我建议您在将来检查时检查全局值和会话值,以便了解何时发生变化。

显示全局变量'max_allowed_pa​​cket'; 显示会话变量类似'max_allowed_pa​​cket';

要使值稍后改变,可以使用以下说明

(1)您正在重新使用仍具有旧值的会话  (2)另一个连接已经运行了SET GLOBAL max_allowed_pa​​cket,甚至可能有些无意义的应用程序或脚本正在执行此操作  (3)服务器重新启动,并且没有按预期应用my.cnf更改 - 可能是文件路径错误,或者配置文件中的设置存在多次。我会检查SHOW GLOBAL STATUS中的当前正常运行时间以了解服务器是否已重新启动

我想不出有任何其他原因会发生这种情况。我确实检查了当你传递--max_allowed_pa​​cket时客户端是否协商服务器端值,但似乎并非如此。

答案 2 :(得分:1)

是的,有人破解了系统。我更改了root密码,一切正常。

答案 3 :(得分:0)

默认情况下,max_allowed_pa​​cket的值在MySQL中是1M。我相信你的“max_allowed_pa​​cket”的大小超过了它的上限。所以,当你检查“SHOW VARIABLES LIKE'max_allowed_pa​​cket';”它显示出一些负面价值。

此外,

MySQL中有两个max_allowed_pa​​cket值:

客户端上的一个:[mysql]部分,[mysqldump],[client]等等。 一个在服务器端:[mysqld]部分。

答案 4 :(得分:0)

尝试将所有用户的“超级”权限设置为“N”,但1位管理员用户除外。这可以防止用户更改max_allowed_pa​​cket。

答案 5 :(得分:0)

我们遇到了这个问题,根本原因是我们被黑了。某些第三方正在运行一个正在更改值的脚本。

提示那些试图弄清楚黑客是否是他们的根本原因的人 - 暂时更改您的MySQL日志记录以包含所有查询。这就是我们最终找到问题的方式。