专栏首页立权的博客Mysql 主备原理

Mysql 主备原理

Mysql 支持互为主从,主库通过binlog 将执行的语句传给从库,具体的执行机构:

   主库上的 dump thread,主库上的 binlog 只有在写入到硬盘之后才能通过 dump thread 传出

   从库上的 IO thread,接收主库的 dump thread 发过来的 binlog 并且生成 relay log,这么一层中间日志

   从库上的 sql thread,执行 relay log 中的语句

值得注意的是 ,从库 会 向主库 验证身份,并且告知 主库 binlog 需要开始 读取的位置, 主库才会通过 dump thread 发送给 io thread

各个从库 请求的位置不一样,得到的最终数据可能不一样,连接上之后,主库会一直传 binlog 内容给 从库,直到没有可以传的内容为止。至此之后,如果再有语句执行,写入 binlog 到 磁盘。

则主库 再通过 dump thread 传给 io thread

binlog 有 三种格式 :

  1. row  这种格式 记录的是关乎主键的,也就是记录 主键 = x 这一行被修改了什么,如果被修改的是多行,则会记录 主键 = x,主键 = y ... 被修改了什么

  2.statement  这种格式 是 单纯记录执行的语句的,但是单纯地记录语句 可能发生不一致的情况,比如主库和从库对于 binlog 的同一条语句选用了 不同索引。

       比如 delete * from table where a > x and b < y , 假设 a 和 b 上都有索引,那么可能主库选择 索引 a, 从库选择 索引 b,删除的列可能不完全相同,导致主从不一致

  3.mixed  这种格式 是上述两种的混合。当记录的是有歧义的语句时候,会使用 row 格式,否则用 statement 格式。也就是 像 2 那样有歧义的话,就会使用 row 格式,而不是 statement

循环复制问题,前面提到,mysql 支持互为主从,那么 binlog 不会在 互为主从的两个数据库之间循环复制吗?

不会,因为数据库会按照 server id 来判断 binlog 是否能被执行

比如 A库 server id = 1,B库 server id = 2, A 和 B 互为主从,互为主从的 库必须 server id 不同

那么 A库产生的 binlog 上 标有 server id = 1, 传给B库,B库执行后产生 binlog,产生的 binlog 的 server id 和 之前的一样, 也就是1

然后再 传给A库 , A库判断 server id 和自己一样,不执行,循环中断。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql-如何保证主从数据一致

      要知道,Mysql 的主从使用的是 binlog 那样简单的 日志传输方式,来完成从库对主库的复制,虽然提高了效率,但是主库和从库之间并没有 raft 那样...

    执生
  • Mysql-主从延迟解决方法

    Mysql 的主从延迟 指的是 主库受写入 后 到这个写入能体现在 从库上 的这段时间

    执生
  • Mysql 高可用与主备数据一致性

    之前的文章提到过,Mysql 是支持互为主从的,这种结构可以在 某台库宕机后,将客户端的请求转发到 另外一个库 来实现故障迁移的效果。

    执生
  • B站UP主自制的开源OCR翻译器走红Github,用一次就粉了

    项目地址:https://github.com/PantsuDango/Dango-Translator

    Python进击者
  • 搜索关键词加个「VS」有何用?学下棋、追剧都不在话下

    你是否尝试过在搜索引擎里输入一个关键词,然后再输入「vs」,看看它能给你自动匹配出什么东西?

    机器之心
  • Android ListView功能扩展,实现高性能的瀑布流布局

    经过前面两篇文章的学习,我们已经对ListView进行了非常深层次的剖析,不仅了解了ListView的源码和它的工作原理,同时也将ListView中常见的一些问...

    用户1158055
  • 谷歌最新翻译系统使错误率减少85%

    已参加或正在参加外语课程并使用过谷歌翻译的学生,可能对其语言转换工具的不太完美翻译表现很熟悉。谷歌推出了一个新的系统,利用最先进的技术将翻译错误减少了约55%到...

    人工智能快报
  • Maven精选系列--发布jar包到Nexus私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库。 发布第三方jar包 这种情况是mav...

    Java技术栈
  • 如果人工翻译一定会被机器翻译替代,翻译专业的学生现在应该怎么办?

    目录 1. 什么叫“替代” 2. 用翻译专业的差异化优势给自己赋能 3. 未来的译者 4. 结语 1 什么叫“替代”? “替代”不是说将翻译职业彻底消灭,而是在...

    企鹅号小编
  • 织云Lite V1.1发布,好礼送不停

    织云平台团队

扫码关注云+社区

领取腾讯云代金券