首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    怒肝两个MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!

    写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办呢?...于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议。 注:部分来自于互联网,感谢数据库大牛前辈们的默默付出!!...交互过程 MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。...服务协议版本号:该值由 PROTOCOL_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义) 服务版本信息:该值为字符串,由 MYSQL_SERVER_VERSION...代码分析 议程 协议协议类型 网络协议相关函数 NET缓冲 VIO缓冲 MySQL API 协议头 ● 数据变成在网络里传输的数据,需要额外的在头部添加4 个字节的包头. . packet length

    3.3K10

    MySQL两个日志系统

    MySQL中有两个重要的日志模块,分别是redo log(重做日志)和binlog(归档日志)。...当我们学习MySQL的时候,这两部分内容是绕不开的,本文我将来详细的介绍一下这两个日志模块,它们在设计上有很多好玩的地方,一些思想也可以在我们工作中使用。...举上边这个例子是因为MySQL也有这个问题,如果每次更新操作都需要写进磁盘,然后磁盘也要先找到对应的那条数据,然后更新,整个过程IO成本、查找成本很高,为了解决这个问题,MySQL在设计的时候就用了类似饭店记账的思路来提高更新效率...整体来看,分为两部分,一部是Server层,主要做的是MySQL功能层面的事情,还有一部分是引擎层,负责存储相关的具体事情。...这个地方为什么要有两份日志,还要从最开始的时候MySQL中没有InnoDB引擎说起,当时MySQL自带的引擎是MyISAM,但是M有ISAM没有crash-safe的能力,binlog日志只能用来归档,

    69020

    MySQL两个主要分支

    // MySQL两个主要分支 // 今天说点儿概念性的东西,关于MySQL两个最流行的分支,MariaDB和Percona Server,这两个分支其实都有自己的优缺点,这里简单介绍一下分支产生的原因...开始之前,我们首先截取一个当前数据库使用流行度的一个图,来简单分析下这两个分支现在的使用情况,图截取自DB-Engine网站: ?...(以下简称MW)主导开发,MariaDB选自她女儿的名字,2008年Sun公司用10亿美金收购了MySQL,但是由于各种原因,Sun公司又将MySQL转手卖给了Oracle,MW感到失去了对MySQL的控制权...在早期,MariaDB还可以作为MySQL的替代品,从MySQL到MariaDB切换应用程序的时候,不需要做任何改动,然后众多原因导致MariaDB这个分支比MySQL官网更新的更快一点,对内核的修改逐渐增多...,意味着MariaDB的高版本数据库已经不能完全兼容MySQL的官方版本了,使用者不得不做出调整,从而适应高版本的MySQL

    1.9K10

    MySQL GTID主备切换协议

    mysql主要有很多错误类型,如下两种: 1062:插入数据时唯一键冲突 1032:删除数据时找不到行 我们可以在mysql配置文件中添加以下内容: slave_skip_errors=1062,1032...GTID有两种生成方式,使用哪种方式取决于Session变量gtid_next的值: gtid_next=automatic:使用默认值,mysql会将server_uuid:gno分配给此事务 gtid_next...是指定的值:比如通过set gtid_nex='current_gtid'指定 每个MySQL实例都维护了一个GTID集合,用来对应这个实例执行过的所有事务。...user_name, master_password = $password, master_auto_position=1 master_auto_position=1表示主备关系使用的是GTID协议...,假设当前时刻下,节点A'的GTID集合是set_a,实例B的GTID集合是set_b,我们在B上执行start slave指令以后,节点B对binlog的处理逻辑如下: 节点B指定主库A',基于主备协议建立连接

    2K10

    MySql协议详解-HandShake握手篇

    MySql协议详解-HandShake握手篇 各位有没有对Cobar、MyCat这些MySqlProxy感到新奇。反正笔者在遇到这些proxy时,感受到其对代码的无侵入兴感到大为惊奇。...于是走上了研究MySql协议的不归路。现在我就在博客里面将其中所得分享出来,以飨大家。 HandShake协议 下图是笔者整理的HandShake协议交互流程 ?...MySql报文图解 MySql协议与众多基于TCP的应用层一样,为了解决"粘包"问题,自定义了自己的帧格式。其主要通过Packet头部的length字段来确定整个报文的大小。...password的摘要方式 AuthPacket的password是对原密码摘要后的byte流,其根据MySql协议版本的不同分为411和322两个大版本。...即4.1.1版本协议和3.2.2版本协议所采用的加密方法。

    2.3K20

    MySQL实际应用的两个案例

    我首先询问了一下他表里面的数据量,得到的反馈是这个表是个配置表,数据量就30来条,这我就很放心了,这么小的数据量,即使出了问题,那么恢复起来也比较容易,为了以防万一,我现在测试环境上做了个测试: mysql...>create table test14 (id int primary key,count_date date); Query OK, 0 rows affected (0.08 sec) mysql...+------------+ | 1 | 20190928 | +----+------------+ 1 row in set (0.00 sec) 创建了一个test14的表,里面包含两个字段...02 关于distinct和order by 的一个问题 之前讲过关于MySQL5.7版本的一些参数,其中包含了sql_mode,这个参数是控制MySQL服务的SQL运行模式,5.7版本的模式更为严格...今天这两个小案例虽然看起来不起眼,但是在实际应用中,还是需要多注意,否则很容易出现问题,今天就到这里吧。

    1.2K10

    mysql协议分析2---认证包

    mysql协议直接和mysql通讯,一窥究竟。...于是主人找到Mysql说:亲爱的mysql,我以前和你交流总要通过第三方的驱动在中间传话,总感觉我们之间还有一个隔阂,有些话也不方便说,我现在有些心里话想直接和你交流。。。你说行吗?...用tcp协议就绕不开三次握手连接和四次握手断开,所以呢你和我连接的第一件事就是三次握手连接。 主人尴尬的笑了笑,tcp的三次握手听到听说过很多次,但是从没有真正的理解。。。...image.png 感觉不直观,在网上找到一个更直观的图: image.png 具体解释如下: protocol_version (1) -- 0x0a protocol_version 第一个字节表示协议版本号...mysql笑道:那当然,我还能骗你不成。

    49030
    领券