mysql replication

本文介绍MySQL的同步原理,包括基于binarylog的传统同步方法和GTID的新型同步方式。阐述了MySQL8.0支持的多种同步机制,如异步、半同步复制及Binlogdumpthread、Replication I/Othread和Replication SQLthread等关键进程的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步原理

Replication是用于将数据从一台mysql(source)复制到另外一台或者多台mysql(replicas),Replication同步默认是asynchronous(异步的),可以配置同步所有数据库,一个数据库,或者只是同步一张表。
MySQL 8.0支持多种方法的replication,传统的方式是基于source的binary log文件,新的基于GTIDs的同步方法不需要依赖binary log,并且能极大的简化多个相似的同步任务,参考GTID同步

Replication支持多种同步方法,原始的同步方法是单向、异步的, 除了内置的异步复制方式外Mysql 8.0支持半同步复制,执行完一个事务之后并不会马上提交,而是需要等到至少一个replica确认收到并且记录到本地(不一定执行)之后才commit。

同步是基于主节点将所有的修改(update,delete等)写入到自己的binary log中,replicas连接到source并从source去pull数据而不是source主动push数据给replicas,replicas执行从source获取到的binary log中的内容,从而创建表,修改数据或结构
每一组mysql同步(一个source一个replicas)主要由3个进程实现,其中一个进程在source上创建,两个进程在replicas上创建

Binlog dump thread

这个是主节点创建的进程,用于当从节点连接上主节点后向从节点发送binary log。可以通过在mysql命令行执行SHOW PROCESSLIST语句查看进程运行状态

Replication I/O thread

从节点start slave(开启同步)时,从节点会开启这个I/0进程,该进程用于主动连接主节点并向主节点索要binary log的更新。
Replication I/O thread进程读取主节点Binlog Dump进程发送过来的更新内容,并将这些内容拷贝到本地写入到本机上的relay log文件。可以通过执行SHOW SLAVE STATUS语句查看进程运行状态

Replication SQL thread

从节点创建replication SQL thread读取并执行本机relay log文件中的内容

关于这三个进程的理解

前面提到每一组主从同步有三个进程,但是实际项目中经常会使用一个主节点多个从节点的模式,这个时候主机点会为每一组同步连接创建一个Binlog dump进程。举个例子,假如我们现在使用三个从节点向一个主节点同步数据,这个时候就有3组主从同步连接,主节点会为每一组连接分别创建一个Binlog dump thread,意味着主节点此时有三个Binlog dump thread。
从节点两个进程互不影响,这意味着即使replication SQL thread读取或者执行sql太慢并不会影响replication I/O thread从主节点获取主节点的更新内容。举个例子,如果从节点停机很久之后从新启动,I/O进程能很快的从主节点读取所有最近的更新内容,而SQL进程可能执行relay log里面的内容很慢或者严重滞后。此时即使从节点再次停机,从节点已经将主节点上所有的更新内容保存到本地的relay log文件中,等从节点再次开机时SQL进程可以继续读取并执行relay log中的内容,这样在一定程度上保证了数据的安全性。

更多内容参考官方文档:msql官网

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值