关于session variables 和 global variables
背景
有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row',在binlog里面还是会看到有生成statement格式的事件?
变量分类
很多文章都说到MySQL的按照可见性范围分成两类 session和global。实际上是三类 session_only, both, global_only.如下图见到的关系。

session_only是仅线程级别意义的,比如 last_insert_id
global_only 是仅全局级别有意义的,比如 sync_master_info
both则是同时有全局和线程两个状态。这类变量需要特别注意它的规则:
1) 每个新线程创建时从global获取值,设置为线程值
2) 单独执行 set var_name=var_value时,只改变本线程的值,不改变global.value
单独执行 set global var_name=var_value时,只改变全局的值,本线程的不改变
前面说到的问题中,binlog_format就是这种both类的变量。因此即使两个命令都执行了,但是对于那些执行命令之前已经存在的长连接线程的本地值,仍然是statement,因此仍会生成statement格式的binlog 事件。
区分变量类型
既然有三种类型,那么如何区分呢。
在现在的MySQL各个版本中, show variables 是等效与 show session variables. 如果要看global类的,需要特别指明show global variables. 但是这里容易造成一个误解。
需要明确的是, show global variables 是包含上图蓝色和绿色部分,而show session variables 是包含全部!
这个效果是因为在执行show variables的时候,作了这么一个判断
“// don't show session-only variables in SHOW GLOBAL VARIABLES”(来源于代码注释),但是对于show session variables这个命令,则无限制,因此显示所有的变量。不太合理 :(
因此如果要归纳那些session_only的,可以将这两个命令的结果作个diff。但要看global_only的就没有比较快捷的方法了。
参考:
http://dinglin.iteye.com/blog/1846854
关于session variables 和 global variables的更多相关文章
- error X3025:global variables are implicitly constant, enable compatibility mode to allow modification
global variables are implicitly constant, enable compatibility mode to allow modification http://xbo ...
- Ansiable Manage MySQL global variables
mysql_variables - Manage MySQL global variables New in version 1.3. Synopsis Requirements (on host t ...
- mysql show global variables字符超1024会被截断
show variables 会存在数据被截断的问题: select 全局变量没有问题 官网解释:https://dev.mysql.com/doc/refman/5.6/en/variables-t ...
- 「2014-2-8」Reading a blog on the pain points of Global Variables of C language
晚上读到一篇<C 语言全局变量那些事儿>.我先前对链接的理解不深,算是涨了一番姿势.此文吐槽的重点,是「非 static 限定的全局变量」带来的看似出人意料(实则可以被合理解释)的行为.虽 ...
- PHP全局变量与SESSION 漏洞(global 与 session)
先看这一段简单的代码 <?php session_start();$_SESSION[‘isadmin’]=’yes’;$isadmin=’no’;echo $_SESSION[‘isadmin ...
- [转]PHP Session的一个警告
警告全文如下: PHP Warning: Unknown: Your script possibly relies on a session side-effect which existed unt ...
- php底层
http://www.phpchina.com/member.php?mod=logging&action=login 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的: ...
- PHP配置详解
[PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...
- PHP解释器引擎执行流程 - [ PHP内核学习 ]
catalogue . SAPI接口 . PHP CLI模式解释执行脚本流程 . PHP Zend Complile/Execute函数接口化(Hook Call架构基础) 1. SAPI接口 PHP ...
随机推荐
- 8.1 编写USB鼠标驱动程序,并测试
学习目标:编写USB鼠标驱动程序,并测试(将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键). 一.怎么写USB设备驱动程序?步骤如下: 1. 首先先定义全局变量usb_d ...
- 嵌入式Linux系统移植(二)——交叉编译工具集
常用工具:readelf.size.nm.strip.strings.objdump.objcopy.addr2line readelf:读可执行文件的elf头 ELF Header: Magic: ...
- 详解 RPL、DPL、CPL 的关系
保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别,使大多数情况下都只和同级代码发生关系.Intel的80286以上的cpu可以识別4个特权级(或特权层) ,0级到3级.数 ...
- 安装sql server
因为电脑中只有mysql数据库,所以昨天准备安装一个sql server.安装中出现了许多问题,首先第一遍的时候,安装组件中没有勾选管理工具这个选项,所以在最后的时候,文件夹中只有配置管理器,没有数据 ...
- 关于springboot 连接mysql 数据库报错问题
springboot连接MySQL运行报错: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more ...
- Python操作nosql数据库之redis
一.NoSQL的操作 NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不 ...
- linux安装oracle远程客户端
文章参考:http://blog.csdn.net/caomiao2006/article/details/11901123 感谢博友分享O(∩_∩)O~ 安装oracle 远程客户端(一般情况下本地 ...
- Vue学习(三):数据绑定语法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Ubuntu下使用Git_1
这里小小的记录一下我在Ubuntu下使用版本控制工具Git的过程.在学习使用Git的时候,我发现了一个很好的网站,这里分享一下,大家共同学习. 猴子都能懂的Git入门 http://git.wiki. ...
- Struts2(三.用户登录状态显示及Struts2标签)
1.编写main.jsp /WebContent/main.jsp 之前用户登录时已把用户存入session <%@ page language="java" content ...