我用到的mysql参数配置与查看
1 查看mysql的操作信息
show [session|global] status [like ....]
show status -- 显示全部mysql操作信息
show status like "com_insert%"; -- 获得mysql的插入次数;
show status like "com_delete%"; -- 获得mysql的删除次数;
show status like "com_select%"; -- 获得mysql的查询次数;
show status like "uptime"; -- 获得mysql服务器运行时间
show status like 'connections'; -- 获得mysql连接次数
通过查看mysql的读写比例,可做相应的配置优化。
如不写 [session|global]
参数, 默认是 session
级别会话只取出当前链接的执行状态;
如写有 global
则可看到 mysql 从启动到现在所有的执行状态;
2 max_allowed_packet 设置及问题
官方文档:https://dev.mysql.com/doc/refman/8.0/en/packet-too-large.html
报错场景:日志中出现了如:
“Package for query is too large (xxxxxxxx > 4194304). You can change this value on the server by setting the max_allowed_package variable”
或者 本地执行SQL文件出现了“Got a packet bigger than 'max_allowed_packet' bytes”
或者com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (1,097,570 > 1,048,576). You can change this value on the server by setting the 'max_allowed_packet' variable
。
分析解决:mysql根据配置文件限制server接受的数据包大小。
较长sql的执行受max_allowed_packet
参数限制,导致执行失败。
可修改合适的max_allowed_packet值或优化sql结构解决。
2.1 命令修改max_allowed_packet解决过程
1. 进入mysql
mysql -hlocalhost -uroot -p 回车进行mysql数据库。
2. 查看max_allowed_packet最大允许包。
命令行修改max_allowed_packet的单位为字节,不能用M、G。
mysql> show VARIABLES like '%max_allowed_packet%';
+---------------------------+------------+
| Variable_name | Value |
+---------------------------+------------+
| max_allowed_packet | 1048576 |
| mysqlx_max_allowed_packet | 67108864 |
| slave_max_allowed_packet | 1073741824 |
+---------------------------+------------+
3 rows in set (0.01 sec)
max_allowed_packet当前值1048576字节=1M,显然小了。
3. 更改max_allowed_packet包大小为10M可以使用下面的配置。
set global max_allowed_packet = 1024*1024*10;
注意!!!
1、命令行中max_allowed_packet
单位只能是 字节。
2、配置生效需要重新链接mysql server,再进入查看验证。
3、重启mysql服务后,命令行中配置的值将会失效!
2.2 配置文件修改max_allowed_packet解决过程
2.2.1 法1:修改my.cnf
# 在[mysqld]部分加入 max_allowed_packet=xxxM
[mysqld]
max_allowed_packet = 16M
记得重启mysql哦:service mysqld restart
Mysql查找my.cnf文件请移步:mysql5.7实践之路 文章的 2 my.conf配置文件位置 章节
2.2.2 法2:找到mysql的启动脚本添加启动参数
包或任何生成的/中间字符串的最大大小。这个过程大部分发生在 load data file
中,有时也发生在update
,insert
过程中。
包消息缓冲区初始化为 net_buffer_length
字节,但需要时可以增长到 max_allowed_packet
字节。该值默认很小,以捕获大的(可能是错误的)数据包。
如果你使用大的 BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。max_allowed_packet
的协议限制为 1GB
。这个值必须是1024的倍数;如果不是1024倍数的值,mysql就会自动四舍五入为最接近的1024的倍数。
当你改变max_allowed_packet的值,你就改变了消息缓冲区的大小,你也应该在客户端允许的范围内修改客户端的buffer大小。在客户端,max_allowed_packet 默认值是 1GB。你可以通过命令行或者配置文件,改变客户端的max_allowed_packet值。
在MySQL5.0.84版本中,会话 max_allowed_packet 值,还只是只读的。在5.0.84之前的版本,设置会话中可以设置 max_allowed_packet 的值,但是没什么作用。