在阿里云上部署了一个MySql服务器,端口3306,密码较简单,对外开放。但是运行一段时间后,每当程序向MySql发起查询服务的时候,MySql就会报错,错误如下:Packet for query is too large (8742 > 1024),这个错误是由于MySql自身的安全性限制,只允许接收1M的SQL代码,超过这个限制,MySql就会出现错误。由于其默认是1M,因此我们只要修改一个参数,也就是max_allowed_packet 大一点问题就能解决。
修改max_allowed_packet 有两种办法:修改配置和命令执行。
    修改配置的方法如下:
    [mysqld]
    max_allowed_packet = 1M ( 将1M更改为4M(如果没有这行内容,增加一行)),保存,重起MySQL服务。
    命令修改换方法是:   
在命令行中可以用SHOW VARIABLES LIKE '%max_allowed_packet%'来查询当前MySql服务器的最大SQL代码允许大小。SET GLOBAL max_allowed_packet = 2*1024*1024*16可以来修改包的大小限制。重启服务就可生效。

    戏剧性的是本以为改了配置以后就可以解决包过大的问题,事实是修改之后也确实有效,但每次第二天发现参数又恢复原来的1M。因为没有人去人为修改,所以事情变得很蹊跷。在网上查到有人说是服务器内存不足,MySql自动重置。经查证本人服务器内存很充足,所以不存在内存过小的问题。网上又有人说是服务器有可能被人攻击人为修改,所为了验证这个问题,打开了MySql日志,果不其然,经过查证日志发现有莫名的IP登上来做了一些更改。
![图中的IP就是陌生IP](
我们再来看看它所做的操作。
[图中的1024就是其重置的]       
    知道问题的原因后,果断修改数据库密码,并关闭其它数据库用户。同时封闭3306的对外端口。做了如上措施后,系统运行几天后,一切正常。
Logo

更多推荐