博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql的both_MySQL中Global、Session和Both(Global & Session)范围
阅读量:6972 次
发布时间:2019-06-27

本文共 4856 字,大约阅读时间需要 16 分钟。

1. Global & Dynamic

example:slow_query_log

Ø  显示该变量的值:

7233c3008bc51b499cdcb975ad996b16.png

当前设置为OFF

Ø  在一个session中设置该Global &Dynamic类型的变量:

620faa927458d3cdc71645f9cb2541df.png

2795adb75f44ba3479f116c7bd7722f0.png

可以看到,对于global类型的变量必需通过global关键字来设置其值。

Ø  在同一个session中重新查看该变量的值:

28cccf9f42078016b52fbc106195b9d5.png

发现该变量值已经发生了改变。

Ø  通过另外的session来查看该变量的值:

ü  该session在改变变量值时已存在

a9c796a9388bfb40b4c11e0a7b1ecbc2.png

ü  该session在改变变量值时不存在,为之后新建的session

4e1c07fd5b0a3d3bbc73c8e6ec0b77e7.png

发现,无论是在改变变量值时已经存在的其他session中还是后来新建的session中均可以看到改变后的变量值。

Ø  重启mysql服务器之后重新查看该变量的值:

535f5dd776941c08c2c67d0438334e74.png

可以看到又恢复到了默认情况。(当然,在其他session中亦是如此)

结论:

l  对于Global& Dynamic类型的变量,需通过set global语句设置变量值。变量设置后,在该session和其他session中(已存在的和后连接的)可即刻看到设置后的值。但重启服务器后设置的 值失效,恢复为默认值。(理由是显然的,因为没有将设置的值写进配置文件。)

l  对于Global类型的变量show、show session、show global显示的结果是一致的,因为该Global变量对所有session可见,通过setglobal设置了该变量的值就相当于立刻设置了各session中该变量的值。

2. Global & Not Dynamic

example:bind_address

Ø  显示该变量的值:

3ea7d7118055af2ebcf66d58b94137fb.png

Ø  在一个session中设置该Global& Not Dynamic类型的变量:

6e5846500676ed2219826e43dbe0c188.png

发现对于Not Dynamic类型的变量不能通过此种方式设置变量值。

结论:

l  对于Not Dynamic类型的变量并不能通过命令直接设置值。

l  因为是Global类型的,因此在各session中执行show、show session、show global显示的结果是一致的。

3. Session & Dynamic

example:gtid_next

Ø  显示该变量的值:

7567f78ad0c845078d1290263cab6c68.png

5fbcced8774a6b1e3fb5247190d6dd08.png

对于Session类型的变量通过show global是得不到值的,需用show、show session命令查看。

Ø  在一个session中设置该Session&Dynamic类型的变量:

7b2ce55aaebce67c8c4e694687916d66.png

Ø  在同一个session中重新查看该变量的值:

6c24a369e03eab3f7528c6d6402d1865.png

可以看到变量值已经变化为设置后的值。

Ø  通过另外的session来查看该变量的值:

ü  该session在变量值更改前已存在

f3d01ae71ea1fb1a3a6a21438f0e5f5b.png

可以看到,在其他已存在session中该变量的值仍为设置之前的值。

ü  该session在变量值更改前不存在,为变量值更改后新连接的session

e313af064735fd1345023245f44379d6.png

可以看到,无论是在其他已存在session中还是后来新建的session中,该变量的值仍为设置之前的值。

Ø  重启mysql服务器之后重新查看该变量的值:

c3784f2e18431e4210283c9ca8bbbd99.png

可以看到,变量值又恢复到设置前的默认值。

结论:

l  对于Session&Dynamic类型的变量可直接通过set、set session命令设置值,但是设置后的变量值只对设置时所使用的session有效,在其他session中(已存在的和后来新建的)不可见。 mysql服务器重启后设置的变量值失效。

l  对于Session类型的变量,通过showglobal不能得到结果。通过show、show session可得到针对发起命令的每个session中变量的值。

4. Session & Not Dynamic

example:proxy_user

Ø  显示该变量的值:

43495a2866a5d45cfb8f56dbddad4b26.png

Ø  在一个session中设置该Session&Not Dynamic类型的变量:

13ba85c7814d39c7944138e7921317cd.png

可以看到,对于Not Dynamic类型的变量不可以通过命令的方式设置变量值。

结论:

l  对于not dynamic类型的变量并不能通过命令直接设置值。

l  对于Session类型的变量,通过showglobal不能得到结果。通过show、show session可得到针对发起命令的每个session中变量的值。

5. Both & Dynamic

example:auto_increment_increment

Ø  显示该变量的值:

2ca64d031c54910072ccec30c3c9b95f.png

ee4b2d7b3b3bdcd93d6a88d36c428899.png

可以看到当前session范围和global范围的变量值均为1。

Ø  在一个session中通过set session语句设置该Both& Dynamic类型的变量:

3d1633ff8ac687cc3f9c02044f200651.png

这里没有使用关键字global,所以,默认使用set session语句设置变量的值。

ü  在同一个session中重新查看该变量的值:

2f390a60fa05ac56dbea89967c91f478.png

这里没有使用关键字global,所以,默认使用showsession语句显示变量的值。在该session中变量值已变为设置后的值。

7551c9a7dda1553d19d1259de2d665aa.png

这里使用关键字global来显示变量的值。在该session中global范围的变量值并没有变为通过setsession语句设置后的值。

ü  通过另外的session来查看该变量的值(在设置变量值时该session已存在):

d9c565c7ec92ddd197c4735c735f61f6.png

ff72e351b0fb5da46103fc3fb62244e3.png

在另外的已存在的session中global型的变量值仍为原来的值。在上个session中通过set session语句设置后的变量值在这里的session中并不可见。

ü  通过另外的session来查看该变量的值(在设置变量值时该session不存在,是之后新连接的session):

7d452e88cfb76bceda29db3d24502593.png

893c9e66619bb44630d7a6b0c7bb3fed.png

在另外的设置好变量值后新建的session中global型的变量值仍为原来的值。在上个session中通过set session语句设置后的变量值在这里的session中并不可见。

ü  重启mysql服务器之后重新查看该变量的值:

a7e9d405063cc8ac8a66d894e366d7c8.png

27c84ca926a7fe9494ab2ea3be4acfab.png

重启mysql服务器后,变量值恢复为默认的值。

Ø  在一个session中通过set global语句设置该Both & Dynamic类型的变量:

fda93b322145c0d21682815258b3cb2c.png

ü  在同一个session中重新查看该变量的值:

c18760c130e6e96dd0c2307ac9239fa8.png

这里没有使用关键字global,所以默认使用showsession variables语句显示变量的值。在该session中session范围的变量值仍未设置前的值。

06131b773154d6f2adfac5f0aa18fbfa.png

这里使用关键字global来显示变量的值。在该session中global范围的变量的值已经变为通过setglobal语句设置后的值。

ü  通过另外的session来查看该变量的值(在设置变量值时该session已存在):

af289af5d431f62065ee157eaba42469.png

6b9bf135ca8941c59d8a46a869554cb2.png

在上个session中通过set global语句设置后的变量值在这个之前已经存在的session中并不可见。而在这个已存在的session中,global范围的变量已变为设置后的值。

ü  通过另外的session来查看该变量的值(在设置变量值时该session不存在,是之后新连接的session):

2b6e14d4171145edc22bf90ab077a6e9.png

e0fabb1a2a7ad9096ffd28c9650de798.png

在另外的设置好变量值后新建的session中global范围的变量为设置后的值。在上个session中通过set global语句设置后的变量值在这个之后新建的session可见。

ü  重启mysql服务器之后重新查看该变量的值:

f32878d144a0c0501ad1a4611451eac2.png

8cd194c15c5de11fcf0e18f446c976ba.png

重启mysql服务器后,变量值恢复为默认的值。

结论:

l  若变量为Both(global/session),则set<=>setsession, show<=>show session。若要设置和显示global范围的变量,则要显式的使用setglobal和和show global。

l  对于Both&Dynamic类型的变量,若通过set命令(默认执行set session命令)设置新值(此时设置的是session范围的变量值)。那么在进行设置的session通过show命令(默认执行show session)查看变量值可以得到设置后的值。而新设置的变量值对其他之前已经存在或者之后创建的session都不可见。另外,由于是用set session设置的变量值,所以对于global范围的变量没有影响,无论在哪些session中通过show global语句查看到的变量值都是在执行set session命令前的值。

l  若通过set global命令设置变量的值(此时设置的是global范围的变量值)。在进行设置的session通过show命令(默认执行show session)查看变量值,得到的仍是设置前的值(也即session范围的值)。在其他之前已存在的session中使用show session命令得到的同样是设置前的值。而在之后新建的session中通过show session命令可得到设置后的值(因为新的session读到了更改后的新值)。无论是在执行更改的session还是更改时已存在的其他 session又或者后来新建的session,通过执行show global命令得到的都是设置后的global范围的值。

l  不管是global范围的变量还是session范围的变量,在重启服务器之后,设置的值都会失效,而恢复为默认的值。

6. Both& Not Dynamic

example:gtid_executed

Ø  显示该变量的值:

9336ef35ca0194081b2203a55e090465.png

Ø  在一个session中设置该Both& Not Dynamic类型的变量:

274a0f0a585255fbf1ffc81e526d872a.png

8cb3c483d094f3c0548a5b7215c0a3be.png

可以看到,对于Not Dynamic类型的变量无论是global范围还是session范围都无法通过命令进行设置。

结论:对于Not Dynamic类型的变量无法通过set、set session、set global命令直接进行设置。

综上所述:

Ø  对于Not Dynamic类型的变量不能通过set、set session、set global命令进行设置。只有Dynamic类型的变量才可以通过这些方式进行设置。

Ø  对于Dynamic变量

ü  若变量为单一的Global范围,则必需使用setglobal命令设置变量值,不能使用set(这里set<=>set session)命令设置,且设置后立即对所有session有效。对于Global范围的变量show、show session、show global等价。

ü  若变量为单一的Session范围,则需使用set(这里set<=>setsession)命令设置变量值,不能使用set global命令设置,且设置后仅对进行设置的session有效。对于Session范围的变量需使用show(这里show<=> show session)命令显示变量值,不能使用showglobal显示session范围的变量,若使用show global则显示为空。

ü  若变量为Both范围,则使用set(这里set<=>setsession)命令设置的变量值仅对进行设置的session有效,此时使用 show(这里show<=>show session)命令可在该session中得到修改后的值,而通过showglobal在该session中得到的仍是通过set设置之前的 Global范围的值;若使用set global命令设置变量的值,则在进行设置的session以及其他既存的session中通过show(这里show<=>show session)命令显示变量值得到的是修改前的值,而在后来新建的session中通过show(这里show<=>show session)命令可以得到修改后的值,但是,无论是新建的还是既存的session若使用show global均可以的到通过set global命令设置后的值。

Ø  不管是global范围的变量还是session范围的变量,在重启服务器之后,设置的值都会失效,而恢复为默认的值。

转载地址:http://rqhsl.baihongyu.com/

你可能感兴趣的文章
iOS 中实现功能引导页面
查看>>
呼吁身份证号码识别生日的问题
查看>>
函数依赖的公理化系统
查看>>
Spring boot 启动过程解析 logback
查看>>
php实现简单视图模板(视图引擎)
查看>>
[改善Java代码]多线程使用Vector或HashTable
查看>>
js事件之event.preventDefault()与event.stopPropagation()用法区别
查看>>
Ubuntu 上 执行命令 java -version 显示 没有那个文件或目录
查看>>
jQuery补充之jQuery扩展/form表单提交/滚动菜单
查看>>
Html5拖拽复制
查看>>
RDLC报表格式化format表达式
查看>>
ArcMap属性的列菜单简介
查看>>
【2011.9.20】基于CXF Web Service:Apache CXF简单部署 .
查看>>
jquery Flexigrid的使用
查看>>
Inotify + rsync
查看>>
中风从水治案
查看>>
SQL Server 内存使用量下降问题
查看>>
嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口
查看>>
网络协议之socks---子网和公网的穿透
查看>>
Java控制语句——if语句
查看>>