Mysql性能调优之max_allowed_packet使用及说明

 更新时间:2022年11月23日 16:47:02   作者:栀郁  
这篇文章主要介绍了Mysql性能调优之max_allowed_packet使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mysql max_allowed_packet使用

max_allowed_packet是什么?

指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。

什么情况下遇到?

有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。

  • 场景一:将本地数据库迁移到远程数据库时运行sql错误。错误信息是max_allowed_packet
  • 场景二:插入数据时某个字段数据过于庞大(使用Elmentui编辑器自带的图片加密,图片过多,地址超级长,最好用的时候改成自定义的),会报

Packet for query is too large (20682943>1048576). You can change this value on the server by setting the max_allowed_packet’ variable.

解决办法?

调整mysql的配置文件

mysql 56中该参数修改好像无效,所以需要升级数据库到mysql57

window下修改配置文件my.ini 在mysqld段下添加

 max_allowed_packet = 64M 

后面的数字根据实际情况调优

linux下修改etc/my.cnf ,同样在mysqld段下添加

 max_allowed_packet = 64M 

注意改完参数后需要重启mysql服务

查看目前配置

show VARIABLES like '%max_allowed_packet%';

写入Mysql报错超出max_allowed_packet

Mysql会根据配置文件会限制server接受的数据包的大小。

如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。

查看当前配置

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

也可以用select查看

mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|              4194304 |
+----------------------+
1 row in set (0.00 sec)

mysql> 

max_allowed_packet 如果不设置,默认值在不同的 MySQL 版本表现不同,有的版本默认1M,有的版本默认4M。

修改方法1(配置文件持久化修改)

vim /etc/my.cnf
[mysqld]
max_allowed_packet = 100M

注意:修改配置文件以后,需要重启mysql服务才能生效。

mysql> show variables like '%max_allowed_pack%';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| max_allowed_packet | 104857600 |
+--------------------+-----------+
1 row in set (0.00 sec)

修改方法2(命令行临时修改)

mysql> set global max_allowed_packet = 100 * 1024 * 1024;
mysql> exit
[root@localhost opt]# 
[root@localhost opt]# mysql -uroot
mysql> 
mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|            104857600 |
+----------------------+
1 row in set (0.00 sec)

mysql> 

注意:

1.命令行修改时,不能用M、G,只能这算成字节数设置。配置文件修改才允许设置M、G单位。

2.命令行修改之后,需要退出当前回话(关闭当前mysql server链接),然后重新登录才能查看修改后的值。通过命令行修改只能临时生效,下次数据库重启后又复原了。

3.max_allowed_packet 最大值是1G(1073741824),如果设置超过1G,查看最终生效结果也只有1G。

[mysqld]
max_allowed_packet = 1G

mysql> show variables like '%max_allowed_pack%';
+--------------------+------------+
| Variable_name      | Value      |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
1 row in set (0.00 sec)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mysql数据库的导入导出方式(各种情况)

    Mysql数据库的导入导出方式(各种情况)

    这篇文章主要介绍了Mysql数据库的导入导出方式(各种情况),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySQL创建用户与授权方法

    MySQL创建用户与授权方法

    MySQL中创建用户与授权的实现方法,对于刚开始接触mysql的朋友可以参考下
    2012-11-11
  • MySQL使用innobackupex备份连接服务器失败的解决方法

    MySQL使用innobackupex备份连接服务器失败的解决方法

    这篇文章主要为大家详细介绍了MySQL使用innobackupex备份连接服务器失败的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • mysql5.7大量sleep进程常规处理方式及配置示例

    mysql5.7大量sleep进程常规处理方式及配置示例

    这篇文章主要给大家介绍了关于mysql5.7大量sleep进程常规处理方式及配置的相关资料,sleep连接过多会严重消耗mysql服务器资源(主要是cpu,内存),并可能导致mysql崩溃,需要的朋友可以参考下
    2023-08-08
  • 区分MySQL中的空值(null)和空字符('''')

    区分MySQL中的空值(null)和空字符('''')

    这篇文章主要介绍了如何区分MySQL中的空值(null)和空字符(''),帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • 关于mysql调用新手们常犯的11个错误总结

    关于mysql调用新手们常犯的11个错误总结

    对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面这篇文章就来总结了关于mysql调用新手们常犯的十一个错误,需要的朋友可以参考学习。
    2017-03-03
  • mysql 8.0.29 卸载问题小结

    mysql 8.0.29 卸载问题小结

    近我将笔记本重装了,为了保留之前的程序,我把相关的注册表和环境备份了下来,重装之后重新导入成功再现了部分软件,下面给大家分享mysql 8.0.29 卸载问题记录,感兴趣的朋友一起看看吧
    2024-04-04
  • MySql5.7.18字符集配置图文详解

    MySql5.7.18字符集配置图文详解

    本文通过图文并茂的形式给大家介绍了mysql5.7.18字符集配置教程,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-06-06
  • MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    MySQL两种表存储结构MyISAM和InnoDB的性能比较测试...
    2006-12-12
  • MySQL如何使用时间作为判断条件

    MySQL如何使用时间作为判断条件

    这篇文章主要介绍了MySQL如何使用时间作为判断条件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论