MySQL依赖大量的参数来控制SQL的处理执行过程。有自己安装过MySQL的小伙伴,对mysql.cnf文件相比很熟悉。这就是mysql默认的参数配置文件,mysql启动时会优先在一些特定位置寻找并读取该文件,但mysql.cnf未必一定存在。my.cnf不存在时并不会影响MySQL实例的初始化启动,相关参数值会取决于编译MySQL时指定默认值和源代码中指定参数的默认值。
MYSQL的参数从大类上可以分为静态(static)参数和动态(dynamic)参数,区分点在于参数值是否可以在实例的生命周期内修改并生效。本文核心讲解动态参数的查询与设置。
MySQL动态参数根据修改作用域有两个关键词global和session,它们表明该参数的修改是基于当前会话还是整个实例周期。有些动态参数仅允许会话中修改生效,如:autocommit;有些参数修改完后会立即在整个生命周期中生效,如:binlog\_cache\_size;另一些参数需要指定修改的作用域:如read\_buffer\_size。接下来我们看一个实例:
查看read_buffer_size变量的值
查看全局参数值的方式:
`SELECT @@global.read_buffer_size\G`
查看当前session参数值
`SHOW VARIABLES LIKE 'read_buffer_size'`
`SELECT @@session.read_buffer_size\G`
接下来我们修改session域的值到512KB,然后新建session,查看参数值。
在新建的 session窗口中我们查看到read_buffer_size值,发现是修改前的128KB,证实了修改的参数值生效的仅仅是当前session,并不会影响其他session。那么如果我们修改的作用域是global呢?
当前 session.read_buffer_size=512KB,global.read_buffer_size=128KB,我们在当前session修改global参数值到1M
由上图我们发现,在global的参数值成功修改后,当前session的值并没有跟随修改。那么对于其他session的参数值是否产生影响呢?我们新建session,查询session.read_buffer_size和global.read_buffer_size
发现新建的session中无论是global还是session read_buffer_size均已变成我们修改后的1MB。说明,动态参数在修改全局参数值后,对于修改前已开启的session,不会立即生效,如果要使其跟随生效,需要关闭重新开启session。
接下来我们会思考另一个问题,在当前实例中修改的全局参数值会持久化吗,重启后还会生效吗?那么我们不妨重启mysql实例试试。
MySQL重启
创建session并查询参数read_buffer_size的值
我们发现,MySQL服务重启后,read_buffer_size参数值并不是我们最终全局设置的1MB而是初始的128KB,说明全局动态参数的设置仅在实例当前生命周期中有效并不会实例化到参数配置文件中。接下来我们通过配置文件修改read_buffer_size=1048576
重启mysql并创建session查看read_buffer_size参数值
如我们所愿,全局参数值正确的被修改为配置文件中指定的参数值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有