mysql主从同步原理

本文详细解读MySQL主从复制的工作原理,涉及binlog、logdump线程、relaylog和SQL thread的角色,以及全同步、半同步复制的区别。了解如何通过binlog定位同步位置,以及异步复制可能带来的问题及解决方案。

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

mysql主从同步原理
mysql主从同步的过程:
Mysql的主从复制中主要有三个线程: master(binlog dump thread)、slave(I/O thread 、SQL
thread) ,Master一条线程和Slave中的两条线程。
主节点 binlog,主从复制的基础是主库记录数据库的所有变更记录到 binlog。binlog 是数据库服务器启动的那一刻起,保存所有修改数据库结构或内容的一个文件。
主节点 log dump 线程,当 binlog 有变动时,log dump 线程读取其内容并发送给从节点。
从节点 I/O线程接收 binlog 内容,并将其写入到 relay log 文件中。
从节点的SQL 线程读取 relay log文件内容对数据更新进行重放,最终保证主从数据库的一致性。
注:主从节点使用 binglog 文件 + position偏移量来定位主从同步的位置,从节点会保存其已接收到的偏移量,如果从节点发生宕机重启,则会自动从 position 的位置发起同步。
由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败了,这时候从库升为主库后,日志就丢失了。由此产生两个概念。
全同步复制
主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方式的话性能会受到严重影响。
半同步复制
和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成。

MySQL主从同步是一种数据备份和复制机制。它允许从一个主要的MySQL服务器复制一个或多个数据库到一个或多个备用服务器,称为“从MySQL服务器”,以便在主MySQL服务器出现故障时保护数据。主从复制需要在主服务器上配置二进制日志文件,并在从服务器上启用复制进程以读取和重演这些日志文件。 MySQL主从同步原理是主服务器上的日志文件记录插入,更新或删除操作,从服务器通过连接到主服务器并请求这些日志文件,并将这些操作重新应用到从服务器上的数据库。主从同步有两种复制方式:基于语句的复制和基于行的复制。基于语句的复制是通过将主服务器上的SQL语句记录到二进制日志文件中来实现的。对于每个在主数据库上执行的SQL语句,从数据库执行相同的语句。这导致所有从服务的数据与主数据库中的数据具有相同的逻辑内容,但存储可能会不同。 而基于行的复制则是记录被更改的行的数据,而不是SQL语句。这种方法在保证数据一致性和精确性时减少了存储空间和网络带宽。 主从同步还存在一些问题,如网络延迟和主服务器的负载等问题。为了解决这些问题,可以使用多个从服务器来分担主服务器的负载并提高读取性能。此外,可采用双层主从同步,其中从服务器是另一组更高级别的主服务器的从服务器,这有助于避免从服务器成为数据孤岛。 总之,MySQL主从同步提供了一种强大和可靠的备份和故障保护机制,无论是对于小型企业还是大型组织都非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值