背景

有同学问到这样一个问题:原来的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的更多相关文章

  1. 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 ...

  2. Ansiable Manage MySQL global variables

    mysql_variables - Manage MySQL global variables New in version 1.3. Synopsis Requirements (on host t ...

  3. mysql show global variables字符超1024会被截断

    show variables 会存在数据被截断的问题: select 全局变量没有问题 官网解释:https://dev.mysql.com/doc/refman/5.6/en/variables-t ...

  4. 「2014-2-8」Reading a blog on the pain points of Global Variables of C language

    晚上读到一篇<C 语言全局变量那些事儿>.我先前对链接的理解不深,算是涨了一番姿势.此文吐槽的重点,是「非 static 限定的全局变量」带来的看似出人意料(实则可以被合理解释)的行为.虽 ...

  5. PHP全局变量与SESSION 漏洞(global 与 session)

    先看这一段简单的代码 <?php session_start();$_SESSION[‘isadmin’]=’yes’;$isadmin=’no’;echo $_SESSION[‘isadmin ...

  6. [转]PHP Session的一个警告

    警告全文如下: PHP Warning: Unknown: Your script possibly relies on a session side-effect which existed unt ...

  7. php底层

    http://www.phpchina.com/member.php?mod=logging&action=login 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的: ...

  8. PHP配置详解

    [PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...

  9. PHP解释器引擎执行流程 - [ PHP内核学习 ]

    catalogue . SAPI接口 . PHP CLI模式解释执行脚本流程 . PHP Zend Complile/Execute函数接口化(Hook Call架构基础) 1. SAPI接口 PHP ...

随机推荐

  1. 解决Pycharm无法使用已经安装Selenium的问题

    重要:参考资料 当前版本 python版本:2.7 pycharm: 2017 原来本机是已经安装了2.7和selenium,新安装了一个pycharm的ide,于是selenium总是安装报错.At ...

  2. linux文件操作篇 (四) 目录操作

    #include <sys/stat.h>#include <unistd.h>#include <dirent.h> //创建文件夹 路径 掩码 int mkdi ...

  3. Nodejs模块初始化

    模块初始化 一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象.之后,缓存起来的导出对象被重复利用. 主模块 通过命令行参数传递给NodeJS以启动程序的模块被称为 ...

  4. 多线程编程以及socket编程_Linux程序设计4chapter15

    看了Linux程序设计4中文版,学习了多线程编程和socket编程.本文的程序参考自Linux程序设计4的第15章. 设计了一个客户端程序,一个服务端程序.使用TCP协议进行数据传输. 客户端进程创建 ...

  5. 常用数字信号的产生(C实现)-ARMA模型数据生成

    ARMA模型属于信号现代谱估计的范畴,AR模型常用于信号的线性预测.AR模型最后归结为线性方程,MA最后为非线性方程,因此,AR模型使用较多. AR模型最后归结为解Yule-Walker方程,对应矩阵 ...

  6. idea启动spring boot无法加载或找不到主类

    问题产生原因:moudle名称修改,导致项目启动不了 在Terminal界面中执行以下三个命令,我在执行第一个命令的时候报了一个找不到dependency的错误,把那个报错的dependency删了就 ...

  7. UVA - 12230

    #include <bits/stdc++.h> using namespace std; int n; double d; double p,l,v,ret,sum; ; /* 村庄A, ...

  8. js倒计时页面跳转

    HTML: <p><span id="timer">60</span>s 后跳转到百度首页</p> JS: //倒计时方法 func ...

  9. 洛谷P1090 合并果子

    合并果子 题目链接 这个只能用于结构体中 struct item { int val; friend bool operator < (item a,item b) { return a.val ...

  10. 详说大数据计算的可类化Classable

    可类化(Classable)是Laxcus大数据管理系统提供的一项基础功能,它能够将类转化为一串字节数组,或者逆向将字节数组转化为一个类.这项功能与JAVA提供的序列化(Serializable)非常 ...