快捷搜索:
来自 网络数据库 2019-08-25 14:03 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

关于binlog的那一点事

这一次大家要研究越来越小巧的binlog内容,上次商量的Query_event和Rows_event鲜明有让您疑忌不解的标题。Query_event中的status-vars蒙受变量有哪些,Rows_event的数据类型是怎么着,元数据又是个怎么着鬼东西,明天大家就来家家户户解答。

有关binlog的这点事(三)(mysql5.7.13),binlogmysql5.7.13

此次大家要商讨更加精细的binlog内容,上次讨论的Query_event和Rows_event分明有令你疑忌不解的难题。Query_event中的status-vars意况变量有怎么着,Rows_event的数据类型是何许,元数据又是个怎么样鬼东西,明天我们就来所有人家解答。

一、Query_event中的令人费解的status-vars

status-vars据书上说是为着协作低版本的mysql服务器而插足的境遇变量设置,告诉低版本的mysql服务器sql语句是在什么情状下实践的

切切实实的格式是气象枚举值 状态参数 

上面以状态枚举值分别说下相当的重大的多少个情景:

(1)0x00 Q_FLAGS2_CODE 4个字节

其一着重是对此SQL_AUTO_IS_NULL、FOREIGN_KEY_CHECKS、UNIQUE_CHECKS、AUTOCOMMIT的设置,SQL_AUTO_IS_NULL是机关填充NULL,FOREIGN_KEY_CHECKS是外键检查,UNIQUE_CHECKS是天下无双键索引检查,AUTOCOMMIT正是自动提交,在此地SQL_AUTO_IS_NULL = 1,其余均为0。

(2)0x01 Q_SQL_MODE_CODE 8个字节

那边的布局要参谋SET sql_mode

相应的境况列表能够参见

能够参考下边包车型客车汉语翻译:

1)单项格局:

2)混合格局:

  1. ANSI:该项要是设置,和REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE等价,在

  2. DB2:该项若是设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一起设置等价。

  3. MAXDB:该项假诺设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USE福睿斯一同设置等价。

  4. MSSQL:该项倘使设置, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS. 一同设置等价。

  5. TRADITIONA:该项如若设置,与STOdysseyICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  6. POSTGRESQL:该项假设设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

  7. ORACLE:该项假设设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一齐设置等价。

  8. MYSQL323:仅对SHOW CREATE TABLE有影响。

  9. MYSQL40:同上。

(3)0x02 Q_CATALOG 

默许记录为"x3stdx0",即mysql服务器所运用的目录。一字节长度 NULL字符串

(4)0x03 Q_AUTO_INCREMENT 

与AUTO_INCREMENT有关,4字节,前2个字节表示AUTO_INCREMENT,后2个字节表示AUTO_INCREMENT_OFFSET

(5)0x04 Q_CHARSET_CODE

字符集 在接连时顾客端设定的字符集(2字节) 连接核对时的字符集(2字节) 服务器核查时的字符集(2字节)

(6)0x05 Q_TIME_ZONE_CODE

时区  一字节长度 字符串,如"x6 08:00" 正是香江时间,那个待确认。

(7)0x07 Q_LC_TIME_NAMES_CODE

星期和月的名号,比如:在罗马尼亚(罗曼ia)语文中星期三是MON,1月是Jan,在别的文字中就不是这么。

二、Rows_event的数据类型和元数据

此地仅仅介绍常用的数据类型

(1)日期时间项目

1)元数据代表的能够规范到微秒的值 n日常为0-3

对与这种类型的在my_time.h中有对应的概念。

MYSQL_TYPE_DATETIME2,是用longlong数据存储的, 固定是4位 n,元数据意味着的是额外数据的尺寸n

图片 1

 1 //来自mysql5.7.13源码 my_time.c
 2 //将longlong时间转化成字符串
 3 //longlong时间格式:
 4 //按位计算
 5 //1 bit  sign(used when on disk)
 6 //17 bits year * 13   month(year 0 - 9999, month 0 - 12)
 7 //5 bits day(0 - 31)
 8 //5 bits hour(0 - 23)
 9 //6 bits minute(0 - 59)
10 //6 bits second(0 - 59)
11 //24 bits microseconds(0 - 999999)
12 //
13 //Total: 64 bits = 8 bytes
14 //
15 //SYYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff

View Code

MYSQL_TYPE_TIME2,也是是用longlong数据存储的, 固定是3位 n,元数据代表的是外加数据的长度n

MYSQL_TYPE_TIMESTAMP2,是岁月戳,固定是4位,元数据代表的是额外数据的尺寸n

MYSQL_TYPE_NEWDATE也是以这种艺术存的,然而未有元数据

2)空中楼阁元数据,以十进制yyyymmddhhmmss存款和储蓄的

MYSQL_TYPE_TIMESTAMP,MYSQL_TYPE_DATETIME都以以这种格局存的。

MYSQL_TYPE_TIME是岁月戳。

3)MYSQL_TYPE_YEA奥迪Q5,不设有元数据。

本条是一九〇〇开首的年份存的

(2)整形,不真实元数据

MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_INT24,MYSQL_TYPE_LONG,MYSQL_TYPE_LONGLONG和原本我们掌握的艺术一样,只但是是小端数据

(3)实数型

MYSQL_TYPE_FLOAT和MYSQL_TYPE_DOUBLE也是通过小端数据存款和储蓄的,不一致的是她们有一字节元数据,他们的元数据代表他们有效数据的长度。

MYSQL_TYPE_NEWDEPASSATL这一个小数存款和储蓄格局不是很断定,仅仅在decimal.h中有定义,不过她的元数据第二个字节代表他有效数据的长度,首个象征她的精度即小数点后长度

(4)字符串类型

MYSQL_TYPE_VARCHA奥迪Q5 他两字节的元数据是她的最长长度。

MYSQL_TYPE_STRING,MYSQL_TYPE_VAR_STavancierING 他们的元数据第2个字节代表真正的花色,而第贰个字节代表存款和储蓄字符串长度的字节数大小

(5)bit类型

MYSQL_TYPE_BLOB 他的元数据存款和储蓄的是bit类型长度的字节数大小

MYSQL_TYPE_BIT 他的元数据存款和储蓄第贰个字节代表有多少bit,而第三个字节代表存款和储蓄bit类型的字节数大小

为此我们得以拿走结论,元数据更加多囤积的是该品种的长短新闻。

切切实实更详实的请查看mysql5.7.13的源码 log_event.cc:1953::log_event_print_value()获取越多的音讯

此番大家要研商更加精致的binlog内容,上次商量的Query_event和Rows_event肯定有让您质疑不...

一、Query_event中的让人费解的status-vars

status-vars据他们说是为着合营低版本的mysql服务器而步向的蒙受变量设置,告诉低版本的mysql服务器sql语句是在什么样意况下实践的

切实的格式是情景枚举值 状态参数 

上边以状态枚举值分别讲下很首要的多少个情景:

(1)0x00 Q_FLAGS2_CODE 4个字节

以此首若是对此SQL_AUTO_IS_NULL、FOREIGN_KEY_CHECKS、UNIQUE_CHECKS、AUTOCOMMIT的设置,SQL_AUTO_IS_NULL是半自动填充NULL,FOREIGN_KEY_CHECKS是外键检查,UNIQUE_CHECKS是天下无双键索引检查,AUTOCOMMIT正是电动提交,在这里SQL_AUTO_IS_NULL = 1,别的均为0。

(2)0x01 Q_SQL_MODE_CODE 8个字节

此处的配备要参照SET sql_mode

相应的景况列表可以参见

能够参照他事他说加以考察上边包车型大巴粤语翻译:

1)单项情势:

  1. ALLOW_INVALID_DATES:该项要是设置,mysql对于日期的月month和日day举办检查。任何日期只要满意0<month<13 , 0<day<32的整数就会变成插入值。
  2. ANSI_QUOTES: 假诺设置该项,mysql会将引号“"’”作为引号来对待,实际不是字符串符号。
  3. ERROR_FOR_DIVISION_BY_ZERO:该项假诺设置,mysql会将别的数除以0以往的数以NULL的格局插入。
  4. HIGH_NOT_PRECEDENCE:该项如果设置,not运算符的优先值会被下跌,如mysql会将NOT a BETWEEN b AND c 分析成NOT (a BETWEEN b AND c)
  5. IGNORE_SPACE:该项假使设置,mysql会容许函数名和“(”能有空格。
  6. NO_AUTO_CREATE_USE凯雷德:该项假若设置,mysql会幸免在grant语句推行时自动生成新顾客。
  7. NO_AUTO_VALUE_ON_ZERO:该项要是设置,mysql在管理AUTO_INCREMENT列时,仅仅只对null生成下三个连串号。
  8. NO_BACKSLASH_ESCAPES:该项假设设置,mysql不可能动用””作为转义字符。
  9. NO_DIR_IN_CREATE:该项借使设置,在建表时mysql会忽略全数的INDEX DIRECTOEvoqueY 和DATA DIRECTO奥迪Q7Y。
  10. NO_ENGINE_SUBSTITUTION:该项假使设置,在CREATE TABLE 或ALTER TABLE时mysql会对无法运用的内燃机报错,但不抓实在的操作。
  11. NO_FIELD_OPTIONS仅对SHOW CREATE TABLE命令有效。
  12. NO_KEY_OPTIONS同上。
  13. NO_TABLE_OPTIONS同上。
  14. NO_UNSIGNED_SUBTRACTION:倘使该项设置,mysql会在对负数更新到unsingned int数上不进行限制。
  15. NO_ZERO_DATE:借使该项设置,何况严峻的SQL情势设置,mysql对于日期是0000-00-00不能够插入更新。
  16. NO_ZERO_IN_DAT:要是该项设置,况兼严苛的SQL形式设置,mysql对于日期有0值的(除了0000-00-00)不可能插入更新。
  17. ONLY_FULL_GROUP_BY在5.75增加产量,对本次开采尚未影响。
  18. PAD_CHAR_TO_FULL_LENGTH:假若该项设置,mysql不会在寻觅回收剩余的char空间。
  19. PIPES_AS_CONCAT:假如该项设置,mysql将把||看成CONCAT()。
  20. REAL_AS_FLOAT:要是该项设置,mysql将把REAL看成FLOAT。
  21. STRICT_ALL_TABLES:该项如若设置,mysql会跻身严厉的sql方式。
  22. STRICT_TRANS_TABLES: 该项要是设置,mysql会进去严苛的sql方式,仅对事情有效。

2)混合格局:

  1. ANSI:该项假若设置,和REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE等价,在

  2. DB2:该项要是设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一齐设置等价。

  3. MAXDB:该项如若设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USE福睿斯一齐设置等价。

  4. MSSQL:该项若是设置, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS. 一同设置等价。

  5. TRADITIONA:该项假使设置,与STENVISIONICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  6. POSTGRESQL:该项假如设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

  7. ORACLE:该项假使设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

  8. MYSQL323:仅对SHOW CREATE TABLE有影响。

  9. MYSQL40:同上。

(3)0x02 Q_CATALOG 

暗中认可记录为"x3stdx0",即mysql服务器所采纳的目录。一字节长度 NULL字符串

(4)0x03 Q_AUTO_INCREMENT 

与AUTO_INCREMENT有关,4字节,前2个字节表示AUTO_INCREMENT,后2个字节表示AUTO_INCREMENT_OFFSET

(5)0x04 Q_CHARSET_CODE

字符集 在连接时顾客端设定的字符集(2字节) 连接核查时的字符集(2字节) 服务器核查时的字符集(2字节)

(6)0x05 Q_TIME_ZONE_CODE

时区  一字节长度 字符串,如"x6 08:00" 正是新加坡时间,这么些待确认。

(7)0x07 Q_LC_TIME_NAMES_CODE

星期和月的称呼,譬喻:在英语文中星期四是MON,8月是Jan,在其余文字中就不是如此。

二、Rows_event的数据类型和元数据

此间仅仅介绍常用的数据类型

(1)日期时间档案的次序

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:关于binlog的那一点事

关键词: