MySQL 主从复制原理和配置流程

devtools/2024/10/25 14:11:36/

目录

  • 一:MySQL 主从复制介绍
  • 二: 异步单线程主从复制
    • 1. 主服务器配置流程
    • 2. 从服务器配置
  • 二:异步多线程主从复制
    • 1. 配置流程

一:MySQL 主从复制介绍

MySQL 主从复制是MySQL官方提供的一种数据备份容灾和负载均衡技术。

  • 数据容灾:主从复制通过将主服务器(master)上的数据更改实时复制到从服务器(slave)上,实现数据的实时备份。

  • 负载均衡:配置好主从复制后,可以将写操作(INSERT、UPDATE、DELETE)指向主服务器,将读操作(SELECT)分散到从服务器上,从而实现读写分离。


实现原理
1、主服务器上,所有的数据更改操作都会记录到二进制日志(binary log)中。
2、从服务器上:通过 I/O 线程读取主服务器上的二进制日志,并将这些日志写入自己的中继日志(relay log)。然后SQL 线程读取中继日志并执行其中的 SQL 语句,从而使从服务器上的数据与主服务器保持一致。

二: 异步单线程主从复制

一般我们配置的主从复制都是这种,主服务器将更改的数据写入二进制日志后,不管从服务器是否已经完成同步。 所以负载高的时候会有延迟,并且主服务器挂了可能会导致部分数据的丢失。

  • 启动单个IO线程读取主服务器的二进制日志

  • 启动单个SQL线程来读取中继日志并执行其中的 SQL 语句,实现数据同步。

1. 主服务器配置流程

(1)配置二进制日志

[mysqld]
server-id               = 145  # 需要唯一 
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 14
max_binlog_size         = 256M

(2)创建复制账户,从服务器通过这个账户来获取二进制日志中的数据

mysql> create user replica@'%' identified by 'eHIGH2014';
Query OK, 0 rows affected (0.01 sec)# 用于复制的用户需要有 REPLICATION SLAVE 这两个权限
mysql> grant all privileges ON *.* to replica@'%';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2. 从服务器配置

(1)开启中继日志(不用手动配置,系统自动就开启了的)

(2)设置一个唯一的 server id

[mysqld]
server-id               = 146

(3)从服务器使用指定的用户和连接信息从主服务器获取二进制日志(binary log)数据

change master tomaster_host="192.168.12.145",master_port=3306,master_user="replica",master_password="eHIGH2014",  master_log_file='mysql-bin.000001',  -- 明确指定日志文件master_log_pos=157;   -- 明确指定日志位置
Query OK, 0 rows affected, 8 warnings (0.03 sec)  

(1)如果没有指定从哪个二进制文件(master_log_file)和具体的位置(master_log_pos)开始复制,默认就是从主服务器当前的二进制日志位置开始复制。

(2)执行这个步骤的时候,IO线程会连接到主服务器,此时主服务器会开启一个dump 线程,通过dump线程将主服务器上的二进制日志事件发送给从服务器的 I/O 线程。


(4)启动两个线程,开始主从复制

# 方法一:不指定线程名称,两个线程会一起开启
START SLAVE;# 方法二:分别开启两个线程
START SLAVE IO_THREAD;
START SLAVE SQL_THREAD;

(5)验证复制状态

SHOW SLAVE STATUS\G

主要关注 I/O线程 和 SQL线程 是否在运行

# 两个都是YES,说明同步正常Slave_IO_Running: YES
Slave_SQL_Running: YES

二:异步多线程主从复制

这种方式是为了解决单线程复制时,主机和从机复制延迟的问题。通过多线程来提高复制性能。

  • I/O 线程始终只有一个。这是因为主服务器上的二进制日志是线性顺序写入的,单个 I/O 线程足以处理这个顺序读取和写入中继日志的工作。

  • 可以配置多个 SQL 线程,每个 SQL 线程并行处理中继日志中的不同事件,以提高复制的并行度和性能。

从服务器使用多个 SQL 线程并行处理不同的复制工作负载,从而加速从服务器应用二进制日志事件的过程。

1. 配置流程

配置流程和异步单线程主从复制流程一样,但是从服务器需要再添加以下配置来配置线程数量:

[mysqld]
# 启用 4 个并行 SQL 线程,指定SQL线程数量,一般多少个CPU就指定数量为几。
slave_parallel_workers = 4# 并行复制的调度策略设置为数据库级别(默认就是),这适合多个数据库主从复制且不用复杂化配置
slave_parallel_type = DATABASE

http://www.ppmy.cn/devtools/128699.html

相关文章

3D看车如何实现?全面解析其优势与特点

3D看车,作为汽车展示领域的一次革新,巧妙融合了三维建模与虚拟现实技术,为消费者带来前所未有的真实、立体观车体验。 一、3D看车的核心实现技术 三维建模技术: 通过高精度三维建模,精确复制汽车每一处细节&#xff…

【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理},gitlab的使用

【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理} git Git 详细安装教程(详解 Git 安装过程的每一个步骤) TortoiseGit 【TortoiseGit】TortoiseGit安装和配置详细说明

仕考网:2025年注册会计师考试报名

打算参加25年注册会计师的朋友们你真的做好准备了吗?如果是新手一定要提前了解这些! 1、时间节点安排: 报名时间:2025年4月8日8点-4月30日20点。 交费时间:2025年6月13日8点-6月28日20点。 准考证打印时间: 考试时间:2025年8月23日-25日。 2、考试科目难度 …

【MAC OS】rocketmq搭建可视化工具rocketmq-dashboard

【MAC OS】rocketmq搭建可视化工具rocketmq-dashboard 文章目录 【MAC OS】rocketmq搭建可视化工具rocketmq-dashboard一、安装1.安装dashboard2.将应用编译为可运行的 jar 包3.关闭dashborad 二、遇到的问题三、参考博客 一、安装 1.安装dashboard 官网:https://…

sortablejs(前端拖拽排序的实现)

源文档&#xff1a;sortablejs - npm 安装 npm install sortablejs --save 引入项目 import Sortable from sortablejs; 使用示例 <template><ul id"items"><li>item 1</li><li>item 2</li><li>item 3</li>&l…

新手向-C接口调用dbus

工作需要用c接口调用dbus&#xff0c;在这里写篇博客记录一下。 1. 方案比较 用C接口调用dbus一般来说有3种方案&#xff0c;分别是libdbus、GDBus&#xff08;GIO的一部分&#xff09;和sd-bus&#xff08;systemd的一部分&#xff09;&#xff0c;以下比较了3种方案的优劣&a…

Vue学习记录之十三 自定义指令directive

一、自定义指令的方法 Vue中有v-if、v-for、v-show、v-model等一些内置指令,其实我们也可以通过directive来自定义组件,但是他属于破坏性的更新。 必须以vNameOfDirective 的形式来命名本地自定义指令,以使得他们可以在模版中直接使用, 标签名称:v-NameofDirective 定义格…

Sqlite3 操作笔记

一、 数据格式 支持数据格式 一般数据采用的固定的静态数据类型&#xff0c;而SQLite采用的是动态数据类型&#xff0c;会根据存入值自动判断。SQLite具有以下五种数据类型&#xff1a; 1.NULL&#xff1a;空值。 2.INTEGER&#xff1a;带符号的整型&#xff0c;具体取决有存…