分类:数据库

基于Netty模拟解析Binlog

系列文章 MySql Binlog初识 MySql Binlog事件介绍篇 MySql Binlog事件数据篇 Mysql通讯协议分析 基于Netty模拟解析binlog 前言 最近一段时间一直再看mysql binlog相关的内容,也整理了几篇相关的文章,对mysql的事件以及通讯协议在理论上有了一个大概的了解,但是缺少实战;本文的目的就是从实战出发,了解binlog解析的整个过程。 解析思路 把binlog的解析过程大致分为以下几个步骤: 1.服务器启动首先获取上一次解析成功的位置(实例中存储在本地文件中); 2.和mysql服务器建立连接; 3.接受mysql发送来的binlog事件; …

阅读全文 »

Mysql通讯协议分析

1.Mysql的连接方式 要了解Mysql的通讯协议,首先需要知道是以哪种连接方式去连接Mysql服务器的;Mysql的主要连接方式包括:Unix套接字,内存共享,命名管道,TCP/IP套接字等。 1.1Unix套接字 在Linux和Unix环境下,可以使用Unix套接字进行Mysql服务器的连接;Unix套接字其实不是一个网络协议,只能在客户端和Mysql服务器在同一台电脑上才可以使用,使用方式也很简单: 以上命令查询Unix套接字文件的位置; 1.2命名管道和内存共享 在window系统中客户端和Mysql服务器在同一台电脑上,可以使用命名管道和共享内存的方式, 命名管道开启:&#8211…

阅读全文 »

MySql Binlog事件数据篇

前言 前两篇文章MySql Binlog初识和MySql Binlog事件介绍篇分别从Binlog入门和Binlog事件如何产生的两个角度来介绍Binlog,本文将从Binlog事件的数据来更深入的了解Binlog。 Binlog事件数据 1.QUERY_EVENT 执行更新语句时会生成此事件,包括:create,insert,update,delete; Fixed data part,总长度13字节: 4字节:执行sql的线程id; 4字节:执行sql的时间; 1字节:数据库名称的长度; 2字节:执行sql产生的错误码; 2字节:状态变量的长度,具体内容在Variable part; Va…

阅读全文 »

MySql Binlog事件介绍篇

前言 上一篇文件MySql Binlog初识,对Binlog的参数,格式以及个别事件做了详细介绍,但是Binlog事件数量比较多,上篇文章中没有对所有事件进行介绍;本文将对Binlog的事件进行简单说明,必要的时候通过SQL触发相关的事件,以下基于Mysql5.5,5.0以前的版本不考虑。 Binlog事件 1.UNKNOWN_EVENT 此事件从不会被触发,也不会被写入binlog中;发生在当读取binlog时,不能被识别其他任何事件,那被视为UNKNOWN_EVENT。 2.START_EVENT_V3 每个binlog文件开始的时候写入的事件,此事件被用在MySQL3.23 &#8211…

阅读全文 »

MySql Binlog初识

Mysql日志 MySQL 的日志包括错误日志(ErrorLog),更新日志(Update Log),二进制日志(Binlog),查询日志(Query Log),慢查询日志(Slow Query Log)等; 更新日志是老版本的MySQL 才有的,目前已经被二进制日志替代;在默认情况下,系统仅仅打开错误日志,关闭了其他所有日志,以达到尽可能减少IO损耗提高系统, 性能的目的,但是在一般稍微重要一点的实际应用场景中,都至少需要打开二进制日志,因为这是MySQL很多存储引擎进行增量备份的基础,也是MySQL实现复制的基本条件; 下面介绍的就是二进制日志–Binlog。 Binlog开启…

阅读全文 »

Netty模拟redis服务器

摘要 学习了一下redis的网络通信协议,准备用netty来模拟接受redis客户端发送过来的协议,进行简单的回复 Redis的客户端与服务端采用叫做 RESP(Redis Serialization Protocol)的网络通信协议交换数据,客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 RESP支持五种数据类型: 状态回复(status reply):以“+”开头,表示正确的状态信息,”+”后就是具体信息​,比如: 其实它真正回复的数据是:+OK\r\n 错误回复(error reply…

阅读全文 »

redis脚本实现分布式锁

redis被大量用在分布式的环境中,自然而然分布式环境下的锁如何解决,立马成为一个问题。例如我们当前的手游项目,服务器端是按业务模块划分服务器的,有应用服,战斗服等,但是这两个vm都有可能同时改变玩家的属性,这如果在同一个vm下面,就很容易加锁,但如果在分布式环境下就没那么容易了,当然利用redis现有的功能也有解决办法,比如redis的脚本。 redis在2.6以后的版本中增加了Lua脚本的功能,可以通过eval命令,直接在RedisServer环境中执行Lua脚本,并且可以在Lua脚本中调用Redis命令。 使用脚本的好处: 1.减少网络开销:可以把一些要批量处理的功能,发在一个脚本里面执…

阅读全文 »

Redis有多耐久还看fsync

redis提供了2中持久化方式,分别是: RDB方式:可以在指定的时间间隔内,生成数据集的时间点快照(point-in-time snapshot) AOF方式:全称(append-only file)AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。Redis 还 可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。 由于rdb方式是时间间隔内生成一次快照,所有它的耐久度是很低的; aof方式的耐久度得看redis多久将数据fsync到磁盘一次,有三种选项: 选项一:每次有新命令追加到 AOF…

阅读全文 »