Mysql max_allowed_packet自动重置为1024的情况

前几天在群里有个朋友问到max_allowed_packet被自动重置的问题,于是打算写个文章来描述下,因为遇到这个问题的人不少,但是提到的解决方案几乎没有。

max_allowed_packet指的是服务器接收的包的大小,该值设置过小,可能导致数据写入失败,通常可以通过修改my.cnf或者在命令行通过set max_allowed_packet来实现。

但是在实际情况中,我们很多时候会遇到这样的一种情况:通过各种方式设置了max_allowed_packet的值,但是一段时间后,max_allowed_packet还是莫名其妙的变成了1024,而my.cnf里面的值还是之前设置的大于1024的值。

这个问题看起来很诡异,但是至少可以确定一点,那就是该值通过某某连接,在连接里面通过set命令给重置了。

一般来说,引起该问题不外乎如下几种情况:

设置不当:设置该值需要修改my.cnf配置,但是一共需要设置两处,如下:

[client]
max_allowed_packet=10240

[mysqld]
max_allowed_packet=10240

mysqld里面控制的是服务端,mysql里面控制的是客户端,如果只设置一处,则当有客户端连接的时候,该值会被重置。

内存不足:当mysql执行大批次查询语句大时候,因为服务器内存不足,引起预警,mysql会重置这个值,已保证数据库的稳定。

黑客攻击:其实在生产环境下,大多数的情况,还真是被攻击了,针对这个情况,需要集中查看,安全不容小觑,mysql 有general_log, 会记录所有执行的sql命令,因为耗费性能,默认是关闭。

mysql> show variables like '%log%';
+-----------------------------------------+---------------------------------+
| Variable_name                           | Value                           |
+-----------------------------------------+---------------------------------+
| back_log                                | 50                              |
| binlog_cache_size                       | 32768                           |
| binlog_direct_non_transactional_updates | OFF                             |
| binlog_format                           | STATEMENT                       |
| expire_logs_days                        | 0                               |
| general_log                             | OFF                             |
| general_log_file                        | /var/run/mysqld/mysqld.log      |

打开general_log:

mysql> set global general_log = ON;

查看general_log:

tail -f /var/run/mysqld/mysqld.log |grep max_allowed_packet (查看log,但打印大量实时sql操作)

tail -f /var/run/mysqld/mysqld.log |grep max_allowed_packet >1.txt (过滤max_allowed_packet,并输出到文件1.txt)

通过日志查看修改的对应的ip地址,然后通过设置黑名单或者修改数据库密码来解决。

总结:生产环境下,应该绝对避免使用root作为数据库连接用户,另外对授权需要严格控制,尽量不要分配给应用的账户修改配置的权限,这样可以避免这类情况的发生,同时提升服务器的安全性。

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

如何在不会导致服务器宕机的情况下,用 PHP 读取大文件

英文:Christopher Pitt ,译文:oschina www.oschina.net/translate/performant-reading-big...

28090
来自专栏代码GG之家

深入Android源码系列(一)

? 本文讲解内容有 loadLibrary流程 linker ELF ndk开发以及配置调试版本 ndk-...

36560
来自专栏Java技术栈

细数Intellij Idea的10个蛋疼问题!

Intellij Idea以下简称IJ。 昨天细数了IJ上的10大666的姿势,IJ确实很智能,在很多方便可以完爆Eclipes,可在某些方面真的被Eclips...

35350
来自专栏编程

tornado全面剖析与实践系列1

猿助猿的技术栈是基于Tornado的, 在学习的过程中参考了很多文章, 但是内容大都碎片化, 缺少系统性讲解, 而且不少关于异步应用的内容还是基于过时的旧版本....

35390
来自专栏idba

如何做一个靠谱的发号器

在使用数据库时,表的主键经常会使用数据库的自增(auto_increment)来产生。这当然很方便也很高效。但是使用自增也会带来一些麻烦。如果从一个数据库以外的...

16160
来自专栏机器学习AI算法工程

用python抓取淘宝评论

来自:http://blog.csdn.net/winterto1990/article/details/47983253 在学习python的时候,一定会遇...

1.1K80
来自专栏Vamei实验室

Linux文件系统的实现

Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文...

37550
来自专栏黄希彤的专栏

玩转云文件存储

千呼万唤始出来的 CFS 解决了集群服务的很多困扰多年的问题,实乃居家旅行,负载均衡、弹性伸缩之必备良药。

1.9K40
来自专栏前端侠2.0

The story behind _references.js 简译一下

在VS2010发布之后,作者还是ASP.NET小组成员时,小组想把js编辑器的功能迁移到一个新的“客户端平台小组”。这个小组将要为VS2012创建一个全新的,现...

12010
来自专栏cnblogs

基于.net core实现项目自动编译、并生成nuget包

18640

扫码关注云+社区

领取腾讯云代金券