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

1、MySQL支持的binlog二进制日志复制类型

- 基于语句(statement)的复制

  在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

- 基于行(row)的复制
把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。

- 混合型(mixed)的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

主从复制原理

  • 主节点

    1、当主节点上进行 insert、update、delete 操作时,会按照时间先后顺序写入到 binlog 中; 2、当从节点连接到主节点时,主节点会创建一个叫做 binlog dump 的线程;一个主节点有多少个从节点,就会创建多少个 binlog dump 线程;

    3、当主节点的 binlog 发生变化的时候,也就是进行了更改操作,binlog dump 线程就会通知从节点 (Push模式),并将相应的binlog 内容发送给从节点。

  • 从节点

    当开启主从同步的时候,从节点会创建两个线程用来完成数据同步的工作。

    I/O线程: 此线程连接到主节点,主节点上的 binlog dump 线程会将 binlog 的内容发送给此线程。此线程接收到 binlog 内容后,再将内容写入到本地的 relay log。

    SQL线程: 该线程读取 I/O 线程写入的 relay log,并且根据 relay log 的内容对从数据库做对应的操作。

为什么要做主从复制

实时灾备,用于故障切换 ​ 负载平衡 ​ 读写分离,提高并发能力

配置主从同步

准备两台机器--已经部署好MySQL

主机名IP版本
master192.168.1.128主机
slave192.168.1.129从机

首先配置好两台主机的/etc/my.cnf

注意:server_id不能一样

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server_id=129
log-bin=binlog

启动MySQL

/etc/init.d/mysqld start
  • 查看server_id的命令
select @@server_id

给master配置同步账号并授予权限

 create user 'rep'@'%' identified by '123';
grant replication slave on *.* to 'rep'@'%';
  • 查看权限
show grants for 'rep'@'%';

  • 锁表设置只读

为后面备份准备,注意生产环境要提前申请停机时间;

注意:测试锁表后不可以可以创建数据库

如果超过设置时间不操作会自动解锁。

flush tables with read lock;

unlock tables;----解锁命令

  • 查看主库状态

注意记住file文件的编号以及position的编号

配置从主机:

设定从库向主库同步

change replication source to source_host='192.168.1.128',source_user='rep',source_password='123',source_log_file='binlog.000003',source_log_pos=1024,source_ssl=1;

启动从库同步开关

start replica;

查看状态

start replica;

测试:

在主库中创建数据库 从库中查看

从库

查看主库有多少从库

show replicas;

主从复制进阶

延时同步

通过人为配置从库和主库延时N小时可以实现延时同步,延时同步可以解决数据库故障出现的数据丢失问题(物理损坏如直接使用rm删除数据库数据和逻辑损坏如使用drop命令删除数据库)。

注意延时同步是通过配置从库延时来达到延时同步

配置从库延时同步,设置sql线程延迟300秒后读取relay log

首先关闭从库开关

stop replica;

配置从库延时同步,设置sql线程延迟300秒后读取relay log

change replication source to source_delay=300;

开启从库同步

start replica;

进行延时测试

在主库中创建relay_test的库,relay_test的库中创建t1的库表插入数据

现在在主库中删除relay数据库,模式误触删除。测试延时同步的作用

在sql线程延迟300秒时间内发现误删除数据库则立马停止从库的sql线程

stop slave sql_thread;

找到误删前relay log的起点和终点

找到relay_log文件的位置

show replica status\G;

输入以下命令,找到误删数据的位置

show relaylog events in "slave-relay-bin.000002";

将relay log进行备份

 mysqlbinlog --start-position=584 --stop-position=1962 /data/mysql/slave-relay-bin.000002 > /tmp/relay.sql

恢复误删除的数据库

source /tmp/relay.sql;

在从库中查看被主库删除的relay_log

GTID同步

GTID是全局事务ID(global transaction identifier),其保证为每一个提交的事务可以生成一个唯一的ID。当事务提交时,MySQL Server在写binlog的时候,会先写一个类型为GTID_Event的特殊Binlog Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog 都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找同步位置,而无需像之前那样通过File_name和File_position找同步位置了。

首先配置数据库的主库和从库/etc/my.cnf文件

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server_id=128
log-bin=binlog
enforce_gtid_consistency=on
gtid_mode=ON

重新启动数据库

/etc/init.d/mysqld restart

在主库的配置

建立同步账号
create user 'rep'@'%' identified by '123';
grant replication slave on *.* to 'rep'@'%';

在从库中的配置

设定从库向主库同步
change replication source to source_host='192.168.1.128',source_user='rep',source_password='123',source_auto_position=1, source_ssl=1;

开启从库的同步

start replica;

检查从库状态

show replica status\G;

测试:

在主库中创建test数据库,在库中创建t1的表

在从库中查看

半同步复制

半同步复制的特性:

  • 半同步复制必须是在主库和从库两端都开启时才行,从库会在连接到主库时告诉主库它是不是配置了半同步。
  • 如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从库节点,那么此时主库的事务线程在提交时会被阻塞并等待,等待的结果有两种,第一种是至少一个从库节点通知主库自己已经收到了所有这个事务的binlog事件;第二种就是主库一直等待直到超过配置的某一个时间点为止,此种情况下半同步复制将自动关闭,转换为异步复制。
  • 从库节点只有在接收到某一个事务的所有binlog并将其写入relay log文件之后才会通知主库

在mysql5.5-5.6使用after_commit的模式下,客户端事务在存储引擎层提交后,在得到从库确认的过程中,主库宕机了,此时主库在等待slave ACK的时候,虽然没有返回到当前客户端但是事务已经提交,其他客户端会读取到已经提交的事务,如果slave端还没有读到该事务的events,同时主库发生了crash,然后切换到备库,那么之前读到的事务就不见了。如果主库永远启动不了,那么实际上在主库已经成功提交的事务在从库上是找不到的,也就是数据丢失了。

为了解决上述问题,在mysql5.7版本增加了after_sync(无损复制)参数,并将其设置为默认的半同步方式。在mysql5.7.2引入的Loss-less Semi-Synchronous(无损复制)通过添加参数after_sync,使得主库在commit事务之前等待slave的ACK,只有slave回复了ACK,主库才会提交事务,这样就保证了master和slave数据的一致性。

在mysql5.7.17又引入了**全同步**技术,全同步复制就是当主库提交事务之后,所有的从库节点必须收到并且apply这些事务,然后主库线程才能继续后续操作。

配置半同步复制

主的配置,加载插件

install plugin rpl_semi_sync_master soname 'semisync_master.so';

查看插件

show plugins;

开启此开关,可写入配置文件

set global rpl_semi_sync_master_enabled=1;

设置主等待从回复ACK的超时时间为3秒,默认是10秒,可写入配置文件

set global rpl_semi_sync_master_timeout=3000;

从的配置

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

开启此开关,可写入配置文件

set global rpl_semi_sync_slave_enabled=1;

查看状态

show status like 'rpl_semi_sync_slave_status';

发现还是关闭状态此时---关闭io进程---开启io进程刷新一下再次查看

测试:

在主库中创建表

查看master成功接收到slave的回复的次数

 show status like 'Rpl_semi_sync_master_yes_tx';

模拟从故障

停止从库的io进程

stop slave io_thread;

关闭半同步开关

set global rpl_semi_sync_slave_enabled=0;

在主库中插入t2表的数据看一下主库反应---可以看到会等待一个超时时间

发现主关闭了半同步复制

show status like 'Rpl_semi_sync_master_status';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921319.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921319.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921319.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF外部打开html文件

注意:这是一份提供WPF外部浏览器打开html的方法,而不是WPF内部嵌入html 需要通过浏览器打开,否则无法使用地址栏拼接参数的形式操作html 下面是打开html的方法↓string localHtmlPath "C:\Users\pangb\Downloads\Help\帮助文档 - 副本.…

Go初级之十:错误处理与程序健壮性

Go初级之十:错误处理与程序健壮性为什么选这个主题? 错误处理是 Go 语言中一个非常独特且重要的设计哲学。它体现了 Go 的“显式错误处理”思想,与其它语言(如 Java/Python)的异常机制不同。在实际开发中,几…

Xsens解码人形机器人训练的语言

随着人形机器人在现实世界的应用中变得越来越普遍,了解实现其类似人类运动的技术至关重要。在Xsens我们满怀热情地探索这一领域,致力于为人形机器人训练开发最佳的动作捕捉解决方案。为了帮助您更好地理解所遇到的术语,我们创建了一份概述&am…

25年下载chromedriver.140

前提: 因为我需要用seleium模拟浏览器获取数据,需要用到这个chromedriver 驱动。 1.chrome浏览器版本号 先检查你的chrome 的版本号是多少,就下载对应的 chromedriver 【三个点】--->【帮助】------>【关于 Google chrome 】 我的版本…

深度学习玩游戏, 模型玩游戏,大模型+游戏 llm+game, 机器学习玩游戏,人工智能游戏陪伴,模型陪玩游戏

1. 论文地址 Think in Games: Learning to Reason in Games via Reinforcement Learning with Large Language Models 2. 中文: Think in Games:做一个在王者荣耀中会玩和思考的Agent 3. 我记得几年前,相关文章还是使用dqn算法。玩雅利达小…

并查集|栈

lc1668不能直接跳class Solution { public:int maxRepeating(string sequence, string word) {int k 0, n sequence.size(), wn word.size(), t 0;for (int i 0; i < n - wn; i) {if (sequence.substr(i, wn) word) {t 1;int j i wn;while (j wn < n &&…

问题三ai思路

好的&#xff0c;我把“路线A&#xff1a;分类建模择时”的代码按功能分段给出&#xff0c;并为每段配上简明解释。你可以将这些段落依次粘贴到已完成清洗后的 df 变量之后直接运行。 0. 依赖导入&#xff08;一次即可&#xff09; 作用&#xff1a;导入所需库&#xff1b;后续…

Java第十四幕集合啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

集合1 Collection接口1.1 集合概述集合是一个装对象的容器。集合中只能存放引用数据类型的对象。集合中有一些大小是固定的&#xff0c;有一些是不固定的。有一些是有序的&#xff0c;有些是无序的。有些可以有重复元素&#xff0c;有一些不可以有重复元素1.2 集合常用方法publ…

硬件基础:串口通信

数据传输方式&#xff08;按位传输方式&#xff09;并行通信通过多条数据线同时传输多个数据位&#xff0c;速度较快但成本高&#xff0c;抗干扰能力弱&#xff0c;适用于短距离通信&#xff0c;如早期的打印机接口。串行通信通过单条或少数数据线逐位传输数据&#xff0c;线路…

从Java全栈到云原生:一场技术深度对话

从Java全栈到云原生&#xff1a;一场技术深度对话 面试官与应聘者互动记录 面试官&#xff1a;你好&#xff0c;欢迎来到我们的面试。先简单介绍一下你自己吧。 应聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;28岁&#xff0c;硕士学历&#xff0c;有5年Java全栈开发…

158-EEMD-HHT算法

158-EEMD-HHT#EMD #希尔伯特变换-&#xff08;Hilbert- Huang Transform&#xff0c;HHT&#xff09;#集合经验模态分解 EEMD #时频分析 #边际谱代码描述1、利用 集合经验模态分解&#xff08;EEMD&#xff09;方法对信号进行分解&#xff0c;得到模态分量 IMF&#xff1b;2、计…

C#开发中的 token

C# 开发中的 Token 详解 C# 开发中的 Token 详解与示例 1. CancellationToken - 异步取消令牌 示例 1:基础取消机制 示例 2:Web API 中的请求取消 2. JWT Token - 身份验证令牌 示例 1:JWT Token 生成与验证 示例 2:ASP.NET Core JWT 认证配置 3. Access Token - API 访问令…

旅游安全急救实训室助力应急处置技能实战化

随着旅游行业的快速发展&#xff0c;游客安全需求日益突出&#xff0c;应急处置能力已成为旅游服务人才的核心素养之一。在中职教育旅游服务与管理专业中&#xff0c;旅游安全急救实训室作为关键教学场所&#xff0c;正发挥着不可替代的作用。一、旅游安全急救实训室的建设背景…

分布式微服务--ZooKeeper的客户端常用命令 Java API 操作

一、ZooKeeper 客户端常用命令 1. 启动与退出 bin/zkCli.sh -server 127.0.0.1:2181 # 连接客户端 quit # 退出客户端2. 节点操作 # 查看子节点 ls / ls -s / ls /app# 查看节点详细信息 ls2 /app stat /app# 创建节点 create /node1 "…

PID控制技术深度剖析:从基础原理到高级应用(六)

PID 控制技术深度剖析&#xff1a;从基础原理到高级应用 最近在项目中有要开始进行PID的控制了&#xff0c;隔了很久没有做PID控制的东西了&#xff0c;所以想正好借这个机会&#xff0c;温习一下和PID有关的内容。 系列文章目录 PID控制技术深度剖析&#xff1a;从基础原理到…

PCL关键点提取

1. 核心概念:什么是关键点?为什么需要关键点? 关键词:信息冗余、计算效率、突出特征 “想象一下,我们有一片密集的点云,包含几十万个点。如果我们直接在每个点上都计算像FPFH这样的局部特征,计算量会非常大,极其耗时,而且很多点所处的区域(比如平坦的墙面)特征非常…

vcruntime140_1.dll缺失怎么办?暗黑破坏神游戏vcruntime140_1.dll缺失的4个解决方法

你是否遇到过这样的情况&#xff1a; 玩《暗黑破坏神》《英雄联盟》《GTA5》的时候&#xff0c;游戏忽然闪退&#xff0c;弹窗提示&#xff1a; “无法启动&#xff0c;因为计算机中丢失 vcruntime140_1.dll” 这不是某一个游戏的问题&#xff0c;而是 Windows 系统运行库缺失…

迁移学习-ResNet

好的&#xff0c;我将为你撰写一篇关于ResNet迁移学习的技术博客。以下是博客的主要内容&#xff1a;ResNet迁移学习&#xff1a;原理、实践与效果深度解析1. 深度学习中迁移学习的重要性与ResNet的独特价值迁移学习&#xff08;Transfer Learning&#xff09;是机器学习中一种…

极大似然估计与概率图模型:统计建模的黄金组合

在数据驱动的时代&#xff0c;如何从海量信息中提取有价值的规律&#xff1f;统计建模提供了两大核心工具&#xff1a;极大似然估计&#xff08;MLE&#xff09;帮助我们根据数据推断模型参数&#xff0c;而概率图模型&#xff08;PGM&#xff09;则通过图形化语言描述变量间的…

解析豆科系统发育冲突原因

生命之树是进化生物学的核心&#xff0c;但由于 不完全谱系排序&#xff08;ILS&#xff09;、杂交 和 多倍化 等复杂过程&#xff0c;解析深层且难解的系统发育关系仍然是一个挑战。**豆科&#xff08;Leguminosae&#xff09;**这一物种丰富且生态多样化家族的理解&#xff0…