随笔分类 -  数据库

MyBatis、SQL、Mysql等
摘要:一、序列图 1.1 启动 1.2 停止 二、源码分析 2.1 启动 这部分代码其实在ServerRunningMonitor的start()方法中。针对不同的destination,启动不同的CanalInstance。主要的方法在于initRunning()。 首先在zk中新增一个临时节点,表示的 阅读全文
posted @ 2018-05-24 17:50 飞轩 阅读(2019) 评论(0) 推荐(0)
摘要:本文主要解析下canal server的启动过程,希望能有所收获。 一、序列图 1.1 启动 1.2 停止 二、源码分析 整个server启动的过程比较复杂,看图难以理解,需要辅以文字说明。 首先程序的入口在CanalLauncher的main方法中。 2.1 加载配置文件 从canal.prope 阅读全文
posted @ 2018-05-24 15:25 飞轩 阅读(5015) 评论(0) 推荐(0)
摘要:本文主要分析的部分是instance启动时,parser的一个启动和工作过程。主要关注的是AbstractEventParser的start()方法中的parseThread。 一、序列图 二、源码分析 parseThread中包含的内容比较清晰,代码不是很长,我们逐步分析下。 2.1 构造数据库连 阅读全文
posted @ 2018-05-24 10:55 飞轩 阅读(1481) 评论(0) 推荐(0)
摘要:众所周知,Otter的代码打包后,是通过Jetty启动的,Otter代码的启动脚本中自带了开启Jetty远程DEBUG的脚本,所以我们只需要在启动Otter Manager和Otter Node的时候,带上如下参数: 其中8888就是我们远程debug的端口号。 然后在IDEA中开启远程调试,具体的 阅读全文
posted @ 2018-02-01 14:04 飞轩 阅读(643) 评论(1) 推荐(0)
摘要:最近在搞数据同步相关的内容,需要对otter的代码进行扩展,所以需要先熟悉一下otter的源码。首先我们整体来看下otter的工程结构。otter的工程结构比较复杂,需要花费一定的时间来理解各个部分的内容,仅仅通过官方文档无法准确的理解各个模块的内容,现分析如下: otter整体的工程结构如下: 其 阅读全文
posted @ 2018-01-22 14:49 飞轩 阅读(582) 评论(0) 推荐(0)
摘要:一、ShardingContext 在Sharding Jdbc中,我们其实需要抓住一个核心类,也就是ShardingContext,分片上下文,里面定义了下面几个内容: 里面的几个参数很简单易懂,但是里面包含的内容也是整个中间件的核心内容。 二、preparedStatement 这块对应于代码中 阅读全文
posted @ 2017-11-22 08:42 飞轩 阅读(1133) 评论(0) 推荐(0)
摘要:Sharding jdbc中的很多地方涉及到算法,比如主从配置这块、分库分表这块。本文主要从源码角度介绍下,目前主要包含哪些算法,以及这些算法的内容。 一、读写分离(主从配置) 这块的代码主要在core模块中的api/algorithm/masterslave下面,这块的算法的主要目的,其实是在读的 阅读全文
posted @ 2017-11-22 08:41 飞轩 阅读(3526) 评论(0) 推荐(0)
摘要:最新的2.0版本的Sharding Jdbc版本,由于需要支持动态配置加载,所以最新的模块信息如下: 其中各个模块的内容如下: sharding jdbc core:核心模块,主要包含的是一个分库分表、读写分离的中间件的核心内容,包括规则配置、sql解析、sql改写、sql路由、sql执行、结果集合 阅读全文
posted @ 2017-11-20 16:33 飞轩 阅读(1507) 评论(0) 推荐(0)
摘要:一般来说,我们对于数据库最主要的要求就是:数据不丢。不管是主从复制,还是使用类似otter+canal这样的数据库同步方案,我们最基本的需求是,在数据不丢失的前提下,尽可能的保证系统的高可用,也就是在某个节点挂掉,或者数据库发生主从切换等情况下,我们的数据同步系统依然能够发挥它的作用 数据同步。本文 阅读全文
posted @ 2017-10-17 15:34 飞轩 阅读(7497) 评论(4) 推荐(0)
摘要:binlog文件格式有以下几种: v1:用于3.23版本 v3:用于4.0.2到4.1版本 v4:用于5.0及以上版本 v2版本只在4.0.x版本中使用,目前已经不再支持了。 处理binlog的程序必须支持以上所有的版本。这部分描述了服务器是如何区分所有的格式的,以便辨别binlog使用的版本。my 阅读全文
posted @ 2017-10-09 13:26 飞轩 阅读(1243) 评论(0) 推荐(0)
摘要:这个部分描述了事件被写入binlog或者delay log中的属性。所有的事件有相同的整体结构,也就是包含事件头和事件数据: 具体的内容随着Mysql版本的升级而不同,这导致了binlog格式的不一致: v1:用于3.23版本 v3:用于4.0.2到4.1版本 v4:用于5.0及以上版本 v2的格式 阅读全文
posted @ 2017-10-09 10:22 飞轩 阅读(641) 评论(0) 推荐(0)
摘要:下面对binlog中事件做个简单说明: UNKNOWN_EVENT 这个事件类型应该永远不会出现。它从不会写入binlog中。如果binlog中的事件没法被识别成其他已知事件,他被当做UNKNOWN_EVENT。 START_EVENT_V3 在binlog文件最开始的符号事件(在Mysql的4.0 阅读全文
posted @ 2017-10-08 15:54 飞轩 阅读(418) 评论(0) 推荐(0)
摘要:在内部,服务器使用C++类文件来表示binlog事件。标准在log_event.h文件中,这些类的方法代码在log_event.cc中。 log_event是基础类。其他的详细的事件子类都是来源于他。一个事件的二进制序列包含头和数据两部分。类型码在每个事件的头部出现。事件可能的类型码定义在log_e 阅读全文
posted @ 2017-10-08 15:03 飞轩 阅读(262) 评论(0) 推荐(0)
摘要:binlog是一系列文件,这些文件包含了Mysql服务实例中数据的变化。 binlog包含一系列二进制日志文件,还包含一个索引文件。 每个日志文件包含了一个4字节的魔法数,后面跟着描述数据变化的事件内容。 魔法数字可以是0xfe 0x62 0x69 0x6e=0xfe 'b''i''n'(这是在lo 阅读全文
posted @ 2017-10-08 14:32 飞轩 阅读(786) 评论(0) 推荐(0)
摘要:Binlog是一系列日志文件,他们包含的内容是Mysql数据内容的改变。如果想开启binlog功能,需要在启动时带上 log bin参数。 binlog是从Mysql3.23.14版本开始的。它包含所有更新数据的sql语句。它还包含可能更新数据的语句(比如,删除不存在的数据行的语句),除非日志的记录 阅读全文
posted @ 2017-10-08 14:04 飞轩 阅读(275) 评论(0) 推荐(0)
摘要:今天在写单元测试时,遇到一个很奇葩的问题,一直在报这样的错误: 分析来分析去,总是找不到错误的原因。于是想到,难道是Druid的配置问题? 于是重新看了下spring的数据库配置, 发现name这个属性感觉不太对劲,于是查阅文档。 原来这边配置的链接用户名应该是userName,而不是name。改为 阅读全文
posted @ 2017-08-07 14:50 飞轩 阅读(2028) 评论(0) 推荐(0)
摘要:一般来说,我们使用mybatis generator来生成mapper.xml文件时,会生成一些增删改查的文件,这些文件中需要传入一些参数,传参数的时候,我们会注意到,参数的大括号外面,有两种符号,一种是 ,一种是$。这两种符号有什么区别呢? 从上面的内容我们可以比较清楚的看到,一般 {}用于传递查 阅读全文
posted @ 2016-12-13 21:44 飞轩 阅读(6792) 评论(2) 推荐(1)