MySQL报错,改了max_allowed_packet后总重置,需要经常重启MySQL

发布网友

我来回答

2个回答

懂视网

新到了一家公司,这几天,开发三天两头反应执行mysql语句报1024的错误,经排查,是max_allowed_packet值过小导致的。于是乎调大该参数

命令行执行:

解决办法1.

mysql> set global max_allowed_packet = 2*1024*1024*10

但是过了一天,又反映报错。于是查看该参数

mysql> show variables like ‘max_allowed_packet‘;
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 1024     |
+--------------------+----------+
1 row in set (0.00 sec)

奇怪了,这个参数又变回默认值了。


解决办法2.

怀疑mysql自动重启了。于是乎,设置mysql配置文件,添加一行参数

max_allowed_packet = 20M

重新命令行设置该参数

mysql> set global max_allowed_packet = 2*1024*1024*10


不出所料,下午的时候这个值又变成默认的了。。于是乎,各种百度。。。排除内存不够用问题,最后锁定在了mysql被人攻击,恶意设置。于是乎。


解决办法3.

开启mysql的全局日志

set global general_log=on;
set global general_log_file=‘/tmp/general.log‘;

观察了一天,终于发现了端倪

技术分享

技术分享


发现有异常登录,恶意执行sql的纪录。于是。查看授权表

mysql> select User,Host,Password from mysql.user;
+-----------+-----------+-------------------------------------------+
| User      | Host      | Password                                  |
+-----------+-----------+-------------------------------------------+
| root      | localhost | *D10046E383955247E6D02EFC235FA9699FF1D663 |
| csd       |     %     | *B404ADB7BC0DB0E0CD49F9D7EB9E8DAEB8FFA98C |
| zcdev     |     %     | *B257B599CE4DE08F6043C8CA9062695084007E16 |
| pba       |     %     | *C8E970FA54065F67198B1959007875A06E5F234E |
| lishibin  |     %     | *88A194AD67780CF5B6350BE5766B43E82136506B |
| csef      |     %     | *B2C53E908217DA3E4158AE24098116186CCF73B0 |
| csef_read |     %     | *A4E03156BBAB6BAD7433A7A3BAAE1C1B0785B8 |
| mysqld    |     %     | *83D34CB8E0F100D54C6D9276D357DB43E8779F |
| root      |     %     |                                           |
| root      |     %     | *D10046E383955247E6D02EFC235FA9699FF1D663 |
| server    |     %     | *866D5A029D62EC05ACC4584CE50F1CD2F50E0E82 |
| testmg    |     %     | *5466FDB0B2316B196605A80D7CAD34F999FB86 |
| mysqls    |     %     | *7BE7CCD65B06F04379A48A396B3A0FF3D0194C22 |
+-----------+-----------+-------------------------------------------+
12 rows in set (0.00 sec)


然后问同事,他说执行这个root空密码登录已经改删除了,这里所有的账号都允许所有主机登录。极度不安全,于是。删除root空密码登录,更改root密码。并将所有账号的主机设置成内网登录。观察了2天,也没有攻击事件了。

本文出自 “初心、始终” 博客,请务必保留此出处http://gouyc.blog.51cto.com/1594451/1831650

测试环境mysql参数max_allowed_packet自动更改的问题排查过程

标签:配置文件   mysql   开发   

热心网友

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com