首页 > 数据库 >【Mysql】主从同步原理

【Mysql】主从同步原理

时间:2022-09-19 20:33:18浏览次数:85  
标签:binlog 同步 节点 线程 Mysql 日志 从库 主从

mysql主从同步过程:
mysql的主从复制主要有三个线程:master:二进制日志转储线程(binlog dump thread)、slave:I/O线程(I/O thread)和SQL线程(SQL thread).master一条线程和slave中的两条线程。

  • 主节点binlog,主从复制的基础是主库将数据库的所有变更记录到binlog,实际上主从同步的原理就是基于binlog进行数据同步的。
  • 主节点二进制日志转储线程(log dump),当binlog有变动时,log dump线程读取其内容并发送给从节点
  • 从节点I/O线程,接受binlog内容(这里是数据更新的部分),并将其拷贝到本地形成中继日志(Relay log)
  • 从节点SQL线程读取relay log 文件内容对数据更新进行重放,最终保证主从数据库一致性。
    注:主节点使用binlog文件 + position偏移量来定义主从同步的位置,从节点会保存其已接受到的偏移量,如果从节点发生宕机重启,则会自动从position的位置发起同步

由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败,这时候从库升级为主库后,日志就丢失了。

全同步复制:主库写入binlog后强制同步日志到从库,所有的从库执行完成之后长才返回给客户端,但是这样性能就会收到严重影响。
半同步复制:和全同步复制不同的是,半同步复制是从库写入日志成功返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成

标签:binlog,同步,节点,线程,Mysql,日志,从库,主从
From: https://www.cnblogs.com/cuipengchong/p/16708964.html

相关文章

  • mysql的单路排序和双路排序
    单路排序:查询数据时,将所有要查询的数据全部加载到内存中进行排序。双路排序:查询数据时,只是将排序字段和记录ID加载到内存中,排好序后在根据id回表加载数据。单路排序占......
  • MySQL-存储引擎
    存储引擎本章包含MySQL的体系结构、存储引擎介绍、存储引擎特点、存储引擎的选择!使用的MySQL8.0版本。MySQL的体系结构MySQL服务的体系结构图:MySQL服务各层的功......
  • mysql(6)约束
    约束是作用于表中字段上的规则,用于限制存储在表中的数据,以保证数据库中数据的正确、有效性和完整性。 约束分类    外键约束具有外键的表为子表,外键关联的表......
  • mysql初步自学
    mysql是目前最常用的一项数据库,所谓的mysql实际上是数据库管理系统(JBMS),数据库使用sql语句实现对数据库的操作,实际上目前的数据库无论是mysql还是oracle都是采用的sql语句去......
  • 【Mysql】什么是MVCC
    多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同事务会话看到自己特定版本的数据,使用版本链。MVCC只在READCOMMITTED和RE......
  • MySQL进阶
    【转】Mysql进阶学习Ⅰ,索引优化入门之前学习的数据库知识,主要是对表的增删改查(CRUD),并没有考虑对数据库做出优化,这章内容就是学习怎么优化数据库。为什么要优化数据库?当......
  • mysql5.7+版本,date类型设置默认值0000-00-00 报错
    在本地建表,发现无法给date类型设置默认值为0000-00-00,报错:  在mysql命令行输入:SELECT@@SQL_MODE,可以看到值为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZER......
  • mysql报错 a foreign key constraint fails(外键约束错误)
    报错信息如下:(pymysql.err.IntegrityError)(1452,u'Cannotaddorupdateachildrow:aforeignkeyconstraintfails解决办法:SETFOREIGN_KEY_CHECKS=0;#临时......
  • update测试用例(mysql)
    update..leftjoin...set...wherecreatetablet1(c1int,c2char(6),c3int)engine=innodb;createtablet2(c1int,c2char(6))engine=innodb;insertintot1v......
  • mysql 清理
    一、清理binlog1、运行一段时间后,mysql数据库占用磁盘很大,仔细查看后发现是*.binlog文件占用很大,一个文件接近1G2、操作设置日志保留时长expire_logs_days自动删除查......