当前位置: 首页 > ops >正文

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被清理可能导致复制中断。需要重新配置复制起点或修复网络问题。

http://www.xdnf.cn/news/8638.html

相关文章:

  • 大模型推理 memory bandwidth bound (4) - Speculative Decoding
  • 【Bluedroid】蓝牙HID Host virtual_unplug全流程源码解析
  • 【笔记】关于synchronized关键字的底层原理之我流理解(未完)
  • TReport组件指南总结
  • C++ 继承详解:基础篇(含代码示例)
  • 【算法】:动态规划--背包问题
  • Linux常用下载资源命令
  • OpenLayers 加载导航与基本操作控件
  • AD9268、AD9643调试过程中遇到的问题
  • Linux的读写屏障
  • Mysql 通过案例快速学习常见操作
  • 索引下探(Index Condition Pushdown,简称ICP)
  • 大模型介绍
  • 动态规划dp
  • Java中==和equals()的终极对比
  • SpikingYOLOX
  • GATT 服务的核心函数bt_gatt_discover的介绍
  • Day 34
  • Docker 镜像标签(Tag)规范与要求
  • 历史数据分析——宁波港
  • 防火墙流量管理-带宽管理
  • OpenLayers 加载图层探查控件
  • Linux系统移植①:uboot概念
  • 基于规则匹配实现企业政策精准匹配实战案例
  • 《Java vs Go:现代编程语言的核心差异与设计哲学对比》
  • nginx 基于IP和用户的访问
  • LangGraph的智能评估
  • 【深度学习新浪潮】什么是MCP?
  • LangGraph:部署智能应用
  • 地理特征类相关可视化图像总结