MySQL中Global、Session和Both(Global & Session)范围

1. Global & Dynamic

example:slow_query_log

?  显示该变量的值:

当前设置为OFF

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

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

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

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

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

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

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

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

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

可以看到又恢复到了默认情况。(当然,在其他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

?  显示该变量的值:

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

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

结论:

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

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

3. Session & Dynamic

example:gtid_next

?  显示该变量的值:

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

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

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

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

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

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

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

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

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

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

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

结论:

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

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

4. Session & Not Dynamic

example:proxy_user

?  显示该变量的值:

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

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

结论:

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

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

5. Both & Dynamic

example:auto_increment_increment

?  显示该变量的值:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

重启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

?  显示该变量的值:

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

可以看到,对于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范围的变量,在重启服务器之后,设置的值都会失效,而恢复为默认的值。

MySQL中Global、Session和Both(Global & Session)范围

时间: 2024-10-06 13:36:22

MySQL中Global、Session和Both(Global & Session)范围的相关文章

mysql 中 administrative roles 啥玩样?

mysql workbench是很常用的mysql管理软件 ,在它的用户权限设置中有 administrative roles 和 schema privileges , 可以翻译作行政角色 和 数据库权限 . 这个听上去有点费劲.在类似的软件dbforge studio for mysql 中 对应的词是 global privileges 和 object privileges ,这个一听就容易理解了,它是全局 和 局部的关系. 看看代码更是立即神清气爽,幡然顿悟了: GRANT DELET

[原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

mysql中数据库database、实例instance、会话session的关系

1. No suitable driver found for http://127.0.0.1:3306/test jdbc_url错误,jdbc走自己的协议. 正确的路径应该是:jdbc:mysql://127.0.0.1:3306/test. 2. mysql中database.instance.session. mysql中建立一个会话,不是和具体的数据库相连接,而是跟instance建立会话,在一个实体机上可以建立多个instance,通过port来区分实例. 而一个实例可以建立多个数

PHP session_set_save_handler将SESSION保存到Mysql中

将SESSION保存到mysql中 <?php /**  * SessionMysql 数据库存储类  */ defined('IN_QIAN') or exit('Access Denied'); class SessionMysql { public $lifetime = 1800; // 有效期,单位:秒(s),默认30分钟 public $db; public $table; /**  * 构造函数  */ public function __construct() { session

mysql状态信息参数解析(show GLOBAL status)

Show global status 在Show global status输出中的项可以用mysqladmin -r -i 1 ext代替,结果一样,获取的是mysql数据库状态变量的每秒累计值,Show status则是代表获取当前值,但是会有一些参数会一致. Aborted_clients由于客户端没有正确关闭连接导致客户端终止而中断的连接数.除了网络原因外,还可能是长时间保持的连接在wait_timeout和interactive_timeout时间限制内没有发起任何请求的,会被serv

[原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载

问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagation=Propagation.SUPPORTS 和propagation=Propagation.require对生成Session有何影响 ? 共同点:都会进入aspect切面处理, 试图新建Session,开启Transaction ,都能获得.TransactionStatus 区别: 前者成

在struts2的action中操作域对象(request、session)

在struts2的Action中,操作域对象一共有三种方式: 1.ActionContext(与servelt API无关联): 1 //相当于request 2 ActionContext.getContext().put("userName", user.getUserName()); 3 //相当于session 4 ActionContext.getContext().getSession().put("userName", user.getUserName

工作中的问题解决 -- (win2003 asp.net) Session和带页面回传的方法无法正常使用解决方案

公司BP&IT项目组.从上上个月成立开始开发BP&IT软件.这个月开始测试我悲剧的发现他尽然不支持我电脑上的IE11.半个多月还没解决 我们先来分析下原因首页 登陆页面正常浏览 http://hr.bingjun.cc/ 登陆后网址呈现 http://hr.bingjun.cc/(F(0-MEj-fnv8v-hWRGI2rOhfQ_0SZjQAnMEBs5P1DKcEhwdX-TTu8TAZ_H6HVGorBM-TaTm4zK_DCSdO8gvqOXWCoou4YJIVziHJ1PC9hk

Cookie中的三个容器request,session,application的设置和获取

public class SaveServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletR