searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

mysql复制协议学习(2)

2023-09-01 00:50:59
8
0

    binlog记录了描述数据库变化的“事件”, 例如表创建操作,表修改操作等。如果不是基于row的日志方式,binlog还会记录可能潜在修改数据库的statement(例如一条没有匹配到行的delete语句)。binlog日志还包含了每条语句更新数据所花费的时间。binlog日志不会记录seletct或者show等不会修改数据等语句。如果想查询所有执行的语句, 可以使用General query log。

    binlog日志主要用于主从复制。Mysql 会把语句中密码进行重写后记录到binlog。从Mysql 8.0.14开始, myslq也支持对binlog和redo log进行加密存储,以防止日志中的敏感信息泄漏。

     Mysql server 会在一下事件发生时, 创建一个新的binlog文件:

  •      服务器开启或重启时
  •      服务器执行flush log操作
  •      当前binlog达到了max_binlog_size

    mysql不会把一个事务分开两个binlog记录, 因此, 如果遇到一个大事务,binlog日志文件也可能大于max_binlog_size的限制。

 

inlog是小端字节序的。binlog前4个字节是魔数:0xFE 0x62 0x69 0x6E. 接着是一个FORMAT_DESCRIPTION_EVENT,先看下19个字节的event header. f1 34 08 58即0x580834f1是指时间戳,占4个字节;第5个字节0x0f是type_code即event type(FORMAT_DESCRIPTION_EVENT=15);接着4个字节02 00 00 00 即0x00000002是server_id;再接着4个字节67 00 00 00是event_length=0x00000067=103;然后4个字节6b 00 00 00是下一个next_position=0x0000006b=107;接着两个字节01 00是flag=0x0001=1,1为LOG_EVENT_BINLOG_IN_USE_F,标识binlog还没有关闭,binlog关闭后,flag会被设置为0。这样4+1+4+4+4+2=19个字节。

 

event data部分分为fixed data和variable data两部分,其中fixed data是event的固定长度和格式的数据,variable data则是长度变化的数据,比如FORMAT_DESCRIPTION_EVENT的fix data长度是0x54=84字节。下面看下这84=2+50+4+1+27个字节的分配:开始的2个字节0x0004是binlog的版本号;接着的50个字节为mysql-server版本5.5.51-log;接下来4个字节是binlog创建时间,这里是0;然后1个字节是0x13是指之后所有event的公共长度,这里都是19;接着27个字节中每个字节为mysql已知的event(共27个)的fixed data的长度;可以发现FORMAT_DESCRIPTION_EVENT自身的variable data部分为空。

 

开启msyql 二进制日志

log-bin=mysql-bin #添加这一行就ok

binlog-format=ROW #选择row模式

server_id=1 #配置mysql replaction需要定义

0条评论
作者已关闭评论
Benson
6文章数
0粉丝数
Benson
6 文章 | 0 粉丝
原创

mysql复制协议学习(2)

2023-09-01 00:50:59
8
0

    binlog记录了描述数据库变化的“事件”, 例如表创建操作,表修改操作等。如果不是基于row的日志方式,binlog还会记录可能潜在修改数据库的statement(例如一条没有匹配到行的delete语句)。binlog日志还包含了每条语句更新数据所花费的时间。binlog日志不会记录seletct或者show等不会修改数据等语句。如果想查询所有执行的语句, 可以使用General query log。

    binlog日志主要用于主从复制。Mysql 会把语句中密码进行重写后记录到binlog。从Mysql 8.0.14开始, myslq也支持对binlog和redo log进行加密存储,以防止日志中的敏感信息泄漏。

     Mysql server 会在一下事件发生时, 创建一个新的binlog文件:

  •      服务器开启或重启时
  •      服务器执行flush log操作
  •      当前binlog达到了max_binlog_size

    mysql不会把一个事务分开两个binlog记录, 因此, 如果遇到一个大事务,binlog日志文件也可能大于max_binlog_size的限制。

 

inlog是小端字节序的。binlog前4个字节是魔数:0xFE 0x62 0x69 0x6E. 接着是一个FORMAT_DESCRIPTION_EVENT,先看下19个字节的event header. f1 34 08 58即0x580834f1是指时间戳,占4个字节;第5个字节0x0f是type_code即event type(FORMAT_DESCRIPTION_EVENT=15);接着4个字节02 00 00 00 即0x00000002是server_id;再接着4个字节67 00 00 00是event_length=0x00000067=103;然后4个字节6b 00 00 00是下一个next_position=0x0000006b=107;接着两个字节01 00是flag=0x0001=1,1为LOG_EVENT_BINLOG_IN_USE_F,标识binlog还没有关闭,binlog关闭后,flag会被设置为0。这样4+1+4+4+4+2=19个字节。

 

event data部分分为fixed data和variable data两部分,其中fixed data是event的固定长度和格式的数据,variable data则是长度变化的数据,比如FORMAT_DESCRIPTION_EVENT的fix data长度是0x54=84字节。下面看下这84=2+50+4+1+27个字节的分配:开始的2个字节0x0004是binlog的版本号;接着的50个字节为mysql-server版本5.5.51-log;接下来4个字节是binlog创建时间,这里是0;然后1个字节是0x13是指之后所有event的公共长度,这里都是19;接着27个字节中每个字节为mysql已知的event(共27个)的fixed data的长度;可以发现FORMAT_DESCRIPTION_EVENT自身的variable data部分为空。

 

开启msyql 二进制日志

log-bin=mysql-bin #添加这一行就ok

binlog-format=ROW #选择row模式

server_id=1 #配置mysql replaction需要定义

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0