mysql lenenc int_MySQL-NonMySQL同步工具源码解读——确定同步位置
经过上一节的鉴权过后,程序已经受主库认可,并且可以像主库发起同步请求。在发起请求之前,还有一个可选的步骤:确认同步时间点。同步时间点由两个属性进行标识: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同步工具源码解读——确定同步位置相关推荐
- mysql 性能和安全性_从源码解读Mysql 5.7性能和数据安全性的提升
源码解析 MYSQL_BIN_LOG::ordered_commit,这个函数,核心步骤如下: 第一步骤:flush Stage#1: flushing transactions to binary ...
- layer 同步调用_YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
一.CALayer官方文档 Layers are often used to provide the backing store for views but can also be used with ...
- 人脸标注工具源码解读
别人给我一份用人脸关键点的标注工具,我研究了一下,不知道该怎么用.还是得问别人怎么用 get userinput 这句话貌似是得到人脸的标注的点,但是我点点点 都没反应那 不知道buding 是怎么用 ...
- mysql 线程池源码模块_易语言Mysql线程池2.0模块源码
易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...
- MySQL内核源码解读-SQL解析之解析器浅析
MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果 ...
- adb 工具源码修改
adb 工具源码修改 1.修改客户端输入后的判断逻辑,使带密码的命令 可以通过命令检查 修改 system/core/adb/client/commandline.cpp 在最前面 新增一个函数 用来 ...
- gh-ost大表DDL工具源码阅读
gh-ost大表DDL工具源码阅读 最终目的 开发环境与测试数据库准备 一个简单的ddl案例 debug分析程序执行过程 vscode debug配置 变量介绍 核心处理逻辑 分析我的需求 最终目的 ...
- mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统
原标题:源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统 作者介绍 张永翔,现任网易云RDS开发,持续关注MySQL及数据库运维领域,擅长MySQL运维,知乎ID:雁南归. MySQL ...
- 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统
剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...
最新文章
- PHP用oop写网站,收藏一个php的OOP开发使用小记
- Bash shell - 2
- 【Cracking the Code Interview(5th edition)】一、数组与字符串(C++)
- ASP.Net Telerik RadGrid动态生成表头
- 【渝粤题库】国家开放大学2021春2332高等数学基础题目
- 读取带空格字符串小结
- React开发(246):react项目理解 this打印
- 月入过万的副业你要不要?不需要编程知识,不限男女,不限学历
- eureka server配置_springcloud项目搭建第三节:eureka集群
- c++ winpcap开发(2)
- 嵌入式设计---(2)任务管理与调度
- unix操作系统设计高清中文
- 文本区 JTextArea 的使用
- 【路径规划】基于matlab自动化拣货最优路径【含Matlab源码 1713期】
- 一个不错的Redis实战学习视频教程
- 51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)
- Redis主从服务器安装配置
- 微信小程序免费教学视频
- 5G推动下,XR的需求“爆发”会来自B端还是C端?
- 微信小程序覆盖map组件