阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

mysql/mariadb:数据库变量(参数)管理

61次阅读
没有评论

共计 2273 个字符,预计需要花费 6 分钟才能阅读完成。

导读 如果我们想要查看 mysql 的某些属性或状态,我们可以查看 mysql 的变量,我们也可以通过改变这些变量的值,来设置 mysql 的工作属性,我们可以把 mysql 变量理解成 mysql 的参数,或者说属性值。

mysql 中变量可以分为系统变量与状态变量。

系统变量配置了 mysql 的运行环境属性。

状态变量显示了 mysql 运行过程中的状态信息。

而系统变量从作用域划分,又可以分为全局变量和会话变量。

全局级别的变量:golbal variables,作用域为整个 mysql 服务器。

会话级别的变量:session variables,作用域为当前会话。

我们可以通过修改这些系统变量达到设置 mysql 属性的目的。

状态变量也分为全局级别与会话级别,但是用户无法设置状态变量,只能查看。

我们总结一些怎样查看这些变量,以及怎样设置这些变量。

查看变量方法如下

我们先来看看怎样查看全局级别的系统变量值。

show global variables \G;

从下图可以看出,我通过上述命令,能够查询出 419 个系统变量。

mysql/mariadb:数据库变量(参数)管理

根据变量名查看变量值,比如我想查看所有跟”版本”相关的属性值

show global variables like‘%version%’\G;

比如想要查看字符集相关的全局设置。

show global variables where variable_name like‘character%’;

比如想要查看某些日志是否开启或关闭。

show global variables where variable_name like‘%log%’and value=’off’;

查看会话级别的所有变量。

会话级别的所有参数往往比全局的更多,因为它不仅继承了全局的部分参数,可能还有一些额外的参数值。

使用如下语句查看会话级别的参数值。

show session variables \G;

mysql/mariadb:数据库变量(参数)管理

当然,使用方法与全局的没有任何区别,只是将 global 关键字改为了 session 关键字。

注意:有些变量只存在于全局级别中,有些变量只存在于会话级别中。

如果不指明 global 或者 session,则表示查看会话级别的变量值,如下语句表示显示会话级别的变量。

show variables;

我们也可以使用另一种语法,查看单个全局系统变量或者会话系统变量。

SELECT @@[global.|session.]system_var_name

但是使用上述语法,需要准确的指明变量名称,比如查看全局系统变量 pid_file 的值,示例如下。

select @@global.pid_file;

mysql/mariadb:数据库变量(参数)管理

或者查看会话变量 warning_count 的值,示例语句如下。

select @@session.warning_count;

mysql/mariadb:数据库变量(参数)管理

但是,我们不能在指明要查看全局变量时,却指定会话级别独有的变量,比如上例中的 warning_count 变量只存在于会话级别,但是我们偏偏却要使用如下方法查看,则会报错。

mysql/mariadb:数据库变量(参数)管理

反之亦然

mysql/mariadb:数据库变量(参数)管理

因为我们说过,有些变量只存在于全局级别,有些变量只存在于会话级别。

如果你并不清楚你要查询的变量具体属于哪个级别,可以不指明 global 或者 session,如果不指明变量所在级别,则表示优先从会话级别查找对应的变量,如果对应变量存在,则显示其值,如果在会话级别中对应的变量不存在,则回去全局级别中查找对应的变量值,示例如下。

mysql/mariadb:数据库变量(参数)管理

在写存储过程时,如果需要调用系统变量的值,可以通过如下方法调用。

@@GLOBAL.var_name

@@SESSION.var_name

同样 @@var_name 表示优先从会话级别获取变量值。

上述示例中的方法为怎样查看系统变量。

我们还可以查询 mysql 运行中的统计信息或状态数据,使用如下语句即可查看状态变量。

show status;

查询出的结果就是一个列表,易读性较高。

mysql/mariadb:数据库变量(参数)管理

同理,也能够通过 like 过滤出我们想要查找的变量名称。

而且状态变量也分为全局级别与会话级别。

mysql/mariadb:数据库变量(参数)管理

修改变量值 / 设定变量值 方法如下

我们可以通过两种方法修改数据库变量:

运行时修改,如果是运行时修改,修改是否立即生效取决于修改的变量类型:

运行时修改 global 级别的变量:对修改之前建立的会话没有影响,仅对修改后新建立的会话有效;

运行时修改 session 级别的变量:仅对当前会话有效,且立即生效;

通过配置文件修改:需重启后生效,但是永久有效。

我们可以通过 set 命令,运行时修改对应的变量。

比如,我们先查看一下 session 级别的某个变量。

mysql/mariadb:数据库变量(参数)管理

会话级别中 autocommit 变量的值为 1,我们现在将会话级别中的 autocommit 变量的值改为 0

mysql/mariadb:数据库变量(参数)管理

我们将设置系统变量的语法总结如下:

SET GLOBAL var_name = value;

SET @@GLOBAL.var_name = value;

SET SESSION var_name = value;

SET @@SESSION.var_name = value;

不指定级别表示默认为设置会话级别的变量。

SET var_name = value;

状态变量对于用户来说是只读的,所以,我们只要学会修改系统变量即可。

在修改系统变量时要记住如下注意点。

运行时修改的变量并非永久有效,重启后将会失效;

运行时修改 global 级别的变量:对修改之前建立的会话没有影响,仅对修改后新建立的会话有效;

运行时修改 session 级别的变量:仅对当前会话有效,且立即生效;

如果想要使设定永久有效,需要设置配置文件。

但是在不确定的情况下,不要随便修改配置文件,否则将可能会出现无法预计的问题。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2273字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中