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

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.dtcms.com/a/210477.html

相关文章:

  • 快速失败(fail-fast)和安全失败(fail-safe)的区别
  • 传统医疗系统文档集中标准化存储和AI智能化更新路径分析
  • 爬虫知识之IP代理
  • 用 AI 让学习更懂你:如何打造自动化个性化学习系统?
  • 嵌入式开发方向开发利器
  • OpenLayers 加载全屏显示控件
  • 【萤火工场GD32VW553-IOT开发板】ADC电压的LabVIEW采集
  • 【Code Agent Benchmark】论文分享No.15:TAU-Bench
  • 标准版v5.6.1, 优化了一些细节提升体验
  • RabbitMQ的详细使用
  • 超详细网络介绍(超全)
  • 5.24本日总结
  • CQF预备知识:Python相关库 -- NumPy 基础知识 - 数组创建
  • Ubuntu20.04 gr-gsm完整安装教程
  • SQL每日一题
  • SQL SERVER常用聚合函数整理及示例
  • 全面指南:使用Node.js和Python连接与操作MongoDB
  • 二十五、面向对象底层逻辑-SpringMVC九大组件之HandlerMapping接口设计
  • 【Linux】进程基本概念与基本操作
  • 【深度学习新浪潮】如何用Dify构建自己的AI Agent?
  • 利用 XML 外部实体注入(XXE)读取文件和探测内部网络
  • 快速排序算法的C++和C语言对比
  • WordPress多语言插件安装与使用教程
  • Java核心基础
  • VMware Flings又又又搬家了
  • SAP全面转向AI战略,S/4HANA悄然隐身
  • 【每日一题】【前缀和优化】【前/后缀最值】牛客练习赛139 B/C题 大卫的密码 (Hard Version) C++
  • 基于netmiko模块实现支持SSH or Telnet的多线程多厂商网络设备自动化巡检脚本
  • 教育信息化2.0时代下学校网络安全治理:零信任架构的创新实践与应用
  • 常见的图像生成模型