MySQL主从同步原理

 概述

主从复制是指将主数据库(Master)的DDL和 DML 操作通过二进制日志传到从库(Slave)服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。

好处及其作用:

增删改操作主库,查询操作从库

数据备份时要加全局锁,避免数据不一致,加了锁,那当前数据库就会处于只读状态,其他客户端不能执行增删改操作,有了主从复制,直接到从库中备份即可,可能会出现数据同步延迟问题


MySQL主从同步原理

MySQL主从同步(Replication)是一种数据复制机制,允许将一个MySQL数据库服务器(主库)的数据自动同步到一个或多个其他服务器(从库)。其核心目标是实现数据备份、读写分离和高可用性。

主从复制的核心就是二进制日志,记录了所有数据定义语言,数据操作语言,不包括数据查询语言

主从同步的基本流程

  1. 主库将数据变更写到二进制日志(Binary Log,简称binlog)。binlog是主从同步的基础,记录了所有可能影响数据库内容的操作(如INSERT、UPDATE、DELETE等)。
  2. 从库的I/O线程会连接到主库,请求获取主库的binlog。主库的binlog dump线程会将binlog内容发送给从库的I/O线程。
  3. 从库的I/O线程将接收到的binlog内容写入到自己的中继日志(Relay Log)。中继日志的作用是暂存从主库接收到的数据变更,供后续处理。
  4. 从库的SQL线程会读取中继日志中的事件,并在从库上重新执行这些SQL操作,从而使从库的数据与主库保持一致。

 

主从同步的三种模式

基于语句的复制(Statement-Based Replication, SBR) 主库记录SQL语句本身到binlog,从库通过重放这些SQL语句来实现同步。优点是日志量小,但某些函数(如NOW())可能导致主从不一致。

基于行的复制(Row-Based Replication, RBR) 主库记录每行数据的变化到binlog。优点是准确性高,但日志量大,尤其在批量操作时。

混合模式复制(Mixed-Based Replication, MBR) 默认使用SBR,仅在可能引发不一致的情况下自动切换到RBR。结合了两者的优点,是MySQL推荐的模式。

 

主从同步的配置示例

主库配置(my.cnf):

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=MIXED

从库配置(my.cnf):

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only=1

设置主从同步的命令:

-- 在主库创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 在从库配置主库信息
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;

-- 启动从库复制
START SLAVE;

主从同步的常见问题

数据延迟 从库由于硬件性能或网络问题,可能无法及时应用主库的变更,导致数据延迟。可以通过监控Seconds_Behind_Master参数来发现。

主从不一致 某些操作可能导致主从数据不一致。可以使用pt-table-checksum等工具进行校验,并通过pt-table-sync工具修复。

复制中断 网络问题或主库binlog被清理可能导致复制中断。需要重新配置复制起点或修复网络问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值