博客
关于我
MySQL原理简介—12.MySQL主从同步
阅读量:789 次
发布时间:2023-02-12

本文共 2421 字,大约阅读时间需要 8 分钟。

MySQL 主从复制详解

MySQL 主从复制是数据库高可用性的重要手段,常用于读写分离架构中。以下将详细介绍 MySQL 主从复制的几种方式及其搭建方法。


1. 异步复制:MySQL 主从复制的基础架构

1.1 MySQL 主从复制的原理

MySQL 主从复制基于二进制日志(BinLog)机制。主库在执行增删改操作时,会将事务写入二进制日志文件。从库定期连接主库,下载二进制日志,并通过重放这些日志操作数据库,确保数据与主库一致。

主从复制架构

以一主两从的架构为例,写请求统一交给主库处理,读请求则由从库处理。为了保证数据一致性,主库会将写入的数据同时复制到各个从库上。

主从复制的核心流程

  • 主库接收写请求

    当主库接收到增删改操作时,会将操作记录到二进制日志中。

  • 主库推送二进制日志

    主库为每个从库创建一个二进制日志传输线程(BinLog Dump),将二进制日志发送到从库。

  • 从库接收并解析日志

    从库上的 IO 线程接收主库发送的二进制日志,并将其写入本地的 RelayLog。

  • 从库执行重放操作

    从库上的 SQL 线程解析 RelayLog,重执行主库的操作,确保数据一致性。


  • 1.2 搭建主从复制架构的配置

    1.2.1 主库配置

  • 创建复制账号

    mysql> create user 'backup_user'@'192.168.31.%' identified by 'backup_123';mysql> grant replication slave on *.* to 'backup_user'@'192.168.31.%';mysql> flush privileges;
  • 备份主库数据

    在低峰期对主库进行全量备份:

    $ /usr/local/mysql/bin/mysqldump --single-transaction -uroot -proot --master-data=2 -A > backup.sql
  • 复制备份文件

    使用 scp 将备份文件传输到从库服务器。

  • 配置从库

    从库执行以下命令:

    mysql> CHANGE MASTER TO MASTER_HOST='192.168.31.229', MASTER_USER='backup_user', MASTER_PASSWORD='backup_123', MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=1689;
  • 启动主从复制

    mysql> start slave;mysql> show slave status;

    检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 Yes。

  • 验证数据一致性

    在主库插入一条数据,检查从库是否能查询到该数据。


  • 2. 半同步复制:MySQL 主从复制的最佳实践

    2.1 异步复制的局限性

    异步复制可能导致数据丢失。主库提交事务前,二进制日志可能尚未传输到从库,导致主库宕机后数据丢失。

    2.2 半同步复制的优势

    半同步复制确保主库事务提交前,二进制日志已传输到从库,避免数据丢失。适合搭建高可用架构。

    2.3 半同步复制的实现

  • 安装半同步复制插件

    在主库和从库上安装半同步复制插件:

    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';mysql> set global rpl_semi_sync_master_enabled=on;mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';mysql> set global rpl_semi_sync_slave_enabled=on;
  • 重启 IO 线程

    mysql> stop slave io_thread;mysql> start slave io_thread;
  • 验证半同步状态

    检查主库状态:

    mysql> show global status like '%semi%';

  • 3. GTID(全局事务 ID)复制:MySQL 主从复制的简化方式

    3.1 GTID 复制的核心原理

    GTID 复制通过记录全局事务 ID,确保从库能够准确还原主库的数据。其优点是配置简单,适合经常更换主从的情况。

    3.2 搭建步骤

  • 启用 GTID 模式

    主库配置:

    mysql> set global gtid_mode=on;mysql> set global enforce_gtid_consistency=on;mysql> set global log_bin=on;
  • 从库配置

    mysql> set global gtid_mode=on;mysql> set global enforce_gtid_consistency=on;mysql> set global log_slave_updates=1;
  • 导入数据

    使用 mysqldump 备份并复制数据。

  • 验证 GTID 状态

    检查 SHOW MASTER STATUS,确认 executed_gtid_set 是否正确。


  • 4. 并行复制:降低主从延迟

    4.1 并行复制的作用

    并行复制通过增加从库的复制线程数量,提升数据同步速度,减少主从延迟。

    4.2 配置方法

  • 设置并行复制线程

    从库配置:

    mysql> set slave_parallel_workers=4;mysql> set slave_parallel_type=logical_clock;
  • 强制读主库

    使用中间件(如 MyCat)实现强制读写分离,确保新写入数据能立即读取。


  • 通过以上方法,可以根据实际需求选择最适合的主从复制方式,确保数据库高可用性和数据一致性。

    转载地址:http://lmbfk.baihongyu.com/

    你可能感兴趣的文章
    mysql二进制包安装和遇到的问题
    查看>>
    MySql二进制日志的应用及恢復
    查看>>
    mysql互换表中两列数据方法
    查看>>
    mysql五补充部分:SQL逻辑查询语句执行顺序
    查看>>
    mysql交互式连接&非交互式连接
    查看>>
    MySQL什么情况下会导致索引失效
    查看>>
    Mysql什么时候建索引
    查看>>
    MySql从入门到精通
    查看>>
    MYSQL从入门到精通(一)
    查看>>
    MYSQL从入门到精通(二)
    查看>>
    mysql以下日期函数正确的_mysql 日期函数
    查看>>
    mysql以服务方式运行
    查看>>
    mysql优化--索引原理
    查看>>
    MySQL优化之BTree索引使用规则
    查看>>
    MySQL优化之推荐使用规范
    查看>>
    Webpack Critical CSS 提取与内联教程
    查看>>
    mysql优化概述(范式.索引.定位慢查询)
    查看>>
    MySQL优化的一些需要注意的地方
    查看>>
    mysql优化相关
    查看>>
    MySql优化系列-优化版造数据(存储过程+函数+修改存储引擎)-2
    查看>>