经过上一节的鉴权过后,程序已经受主库认可,并且可以像主库发起同步请求。在发起请求之前,还有一个可选的步骤:确认同步时间点。同步时间点由两个属性进行标识:Binlog文件名、偏移量。工具支持自定义时间点,如果没有指定,默认从主库的当前时间点开始同步。下面,介绍获取时间点协议,主要是向主库发起“SHOW MASTER STATUS”查询指令。

这是一个COM_QUERY类型的查询。COM_QUERY是基本的查询命令,服务器返回若干行,每行若干列,可能我们常见的select指令,也是COM_QUERY命令。他的格式非常简单。1 [03] COM_QUERY

string[EOF] the query the server shall execute

而解析服务器返回的结果可以说非常复杂,所以我们写数据库程序一般是使用客户端库,而不是自行解析。总体流程如下:

对于第一个字节是0xfb的情况,只在执行如下指令的时候才会发生。应用目前没有这种操作,所以暂时忽略之。LOAD DATA LOCAL INFILE '' INTO TABLE

EOF、ERR、OK包的格式上一节都有描述,下面给出列定义和行数据的解析方法。

列定义

主要是两个版本,一个是ColumnDefinition41和ColumnDefinition320这两种,后者应用于4.1以前版本的MySQL。这里只给出新版MySQL的格式。lenenc_str catalog

lenenc_str schema

lenenc_str table

lenenc_str org_table

lenenc_str name

lenenc_str org_name

lenenc_int length of fixed-length fields [0c]

2 character set

4 column length

1 type

2 flags

1 decimals

2 filler [00] [00]

if command was COM_FIELD_LIST {

lenenc_int length of default-values

string[$len] default values

}

行数据

每行可以包含多个列,每个列都是一个lenenc_str。

lenenc_xxx

这里简单说一下这种lenenc_xxx类型的东西到底是什么。lenenc_str由两部分组成,第一部分是一个lenenc_int类型、标记字串长度的整数,第二部分是字串本身。这个lenenc_int类型,保证了字串长度可以超过255。同时考虑到大部分数据都比较短,每次都用多个字节表示长度过于浪费,于是指定了编码规则,规则如下:

A. 如果第一个字节小于0xfb,那么他本身就是字串长度。

B. 如果第一个字节是0xfc,那么他后面的2个字节表示字串长度。

C. 如果第一个字节是0xfd,那么他后面的3个字节表示字串长度。

D. 如果第一个字节是0xfe,那么他后面的8个字节表示字串长度。需要注意,此时需要查看究竟他后面有没有8个字节,如果没有,可能这是一个EOF包。

E. 如果第一个字节是0xff,那么这意味着一个ERR包。

F. 如果第一个字节是0xfb,这只会出现在行数据中,意味着这个字段是个NULL。

mysql lenenc int_MySQL-NonMySQL同步工具源码解读——确定同步位置相关推荐

  1. mysql 性能和安全性_从源码解读Mysql 5.7性能和数据安全性的提升

    源码解析 MYSQL_BIN_LOG::ordered_commit,这个函数,核心步骤如下: 第一步骤:flush Stage#1: flushing transactions to binary ...

  2. layer 同步调用_YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer

    一.CALayer官方文档 Layers are often used to provide the backing store for views but can also be used with ...

  3. 人脸标注工具源码解读

    别人给我一份用人脸关键点的标注工具,我研究了一下,不知道该怎么用.还是得问别人怎么用 get userinput 这句话貌似是得到人脸的标注的点,但是我点点点 都没反应那 不知道buding 是怎么用 ...

  4. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码

    易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...

  5. MySQL内核源码解读-SQL解析之解析器浅析

    MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果 ...

  6. adb 工具源码修改

    adb 工具源码修改 1.修改客户端输入后的判断逻辑,使带密码的命令 可以通过命令检查 修改 system/core/adb/client/commandline.cpp 在最前面 新增一个函数 用来 ...

  7. gh-ost大表DDL工具源码阅读

    gh-ost大表DDL工具源码阅读 最终目的 开发环境与测试数据库准备 一个简单的ddl案例 debug分析程序执行过程 vscode debug配置 变量介绍 核心处理逻辑 分析我的需求 最终目的 ...

  8. mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统

    原标题:源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统 作者介绍 张永翔,现任网易云RDS开发,持续关注MySQL及数据库运维领域,擅长MySQL运维,知乎ID:雁南归. MySQL ...

  9. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

最新文章

  1. PHP用oop写网站,收藏一个php的OOP开发使用小记
  2. Bash shell - 2
  3. 【Cracking the Code Interview(5th edition)】一、数组与字符串(C++)
  4. ASP.Net Telerik RadGrid动态生成表头
  5. 【渝粤题库】国家开放大学2021春2332高等数学基础题目
  6. 读取带空格字符串小结
  7. React开发(246):react项目理解 this打印
  8. 月入过万的副业你要不要?不需要编程知识,不限男女,不限学历
  9. eureka server配置_springcloud项目搭建第三节:eureka集群
  10. c++ winpcap开发(2)
  11. 嵌入式设计---(2)任务管理与调度
  12. unix操作系统设计高清中文
  13. 文本区 JTextArea 的使用
  14. 【路径规划】基于matlab自动化拣货最优路径【含Matlab源码 1713期】
  15. 一个不错的Redis实战学习视频教程
  16. 51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)
  17. Redis主从服务器安装配置
  18. 微信小程序免费教学视频
  19. 5G推动下,XR的需求“爆发”会来自B端还是C端?
  20. 微信小程序覆盖map组件

热门文章

  1. 测试多个输入条件的方法
  2. Redis的五大数据类型
  3. 剑指Offer--青蛙跳台阶引发的一系列问题
  4. bzoj 3224 Tyvj 1728 普通平衡树
  5. 十天学会ASP.Net——(2)
  6. SQL server 系统优化--通过执行计划优化索引(1) (转)
  7. 一文带你吃透Vue生命周期(结合案例通俗易懂)
  8. es6 --- 使用Symbol保护私有变量
  9. Hyperledger Fabric区块链工具configtxgen配置configtx.yaml
  10. 《HTML5与CSS3实战指南》——2.2 基本的HTML5模板