我用到的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 中,有时也发生在updateinsert过程中。
包消息缓冲区初始化为 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 的值,但是没什么作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值