在MySQL集群架构之主从模式异步复制实践 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)及其后相关集群架构实践中已经使用到了M有SQL的相关系统变量,比如查看服务器状态。本文从维护的角度概述MySQL中的系统变量。
在MySQL里参数也可以叫变量,一般配置文件为/etc/my.cnf。当MySQL实例启动时,MySQL就会先去读一个配置文件用来寻找数据库的各种文件所在位置以及指定某些初始化参数。通过命令:mysql --help | grep my.cnf 可以查找到这些参数文件的位置,当然读取文件是有优先级顺序的,如下:
当然,用户也可以在数据库启动时加锁从指定参数文件进行启动,如:
mysqld_safe --defaults-file=/etc/my.cnf&
MySQL中的变量通常定义了某种内存结构有多大等设置,这些变量可以分为系统变量和状态变量,如下图示:
一定注意其没有类似于Orcle中的隐含参数,它也不需要。
系统变量
该变量配置MySQL服务器的运行环境。有些变量同时拥有以上两个级别,MySQL将在建立连接时用全局级变量初始化会话级变量,但一旦连接建立之后全局级变量的改变不会影响会话级变量。
关于变量的查看,show variables优先显示会话级变量值,如果不存在则显示全局级变量的值。当然可以加上global或session关键字进行区别。在写一些存储过程时,如需引用系统变量值,可以使用如下方法:
@@GLOBAL.var_name
@@SESSION.var_name
@@LOCAL.var_name
如果没有指定级别,默认使用会话级变量值。
除了以上方式查看变量外,还可以通过直接查询表——系统数据字典。参考如下:
通过非root用户登录MySQL数据库8.0.28版本,show databases。
可以看到除了用户自定义的应用数据库外,还有系统建立的inforation_schema数据库。
通过root用户登录,show databases;
可以看到出去用户自定义数据库,还有另外4个系统建立的数据库information_schema/performance_schema/mysql/sys。
在performance_schema中,show tables中可以看到表:
通过这四张表可以查看变量的值。
在MySQL服务器启动时,也可以通过以下两种方式设置系统变量的值:
1)命令行参数,如mysqld --max_connections=200。
2)选项文件(my.cnf)。如果服务器已经启动,可以通过SET语句修改:
SET GLOBAL var_name=value;
SET @@GLOBAL var_name=value;
SET SESSION var_name=value;
SET @@SESSION var_name=value;