【数据库】MySQL的主从复制模式

news2024/9/25 3:21:08

MySQL的主从复制模式包括异步复制,全同步复制,半同步复制。MySQL默认为异步模式。MySQL5.7引入了一种新的半同步方案,并且在5.7引入了一个新的参数,rpl_semi_sync_master_wait_point,这个参数有两种取值,1)AFTER_SYNC 2)AFTER_COMMIT 前者是新的半同步方案后者为老的半同步方案。

MySQL的主从复制模式有三种

异步复制:

(Asynchronous replication)。MySQL的默认复制,主库在执行完客户端提交的事务后会立刻将执行结果返回给客户端,并不关心从库是否已经接收处理,这样带来的问题就是当主死掉了,此时主上提交的事务可能还没有传到从上。而强行将从提升为主就会导致新主上的数据不完整。

异步复制是一种基于偏移量的主从复制,实现的原理是:主库开启bbinlog功能并授权从库连接主库,从库通过change master得到主库的相关同步信息,然后连接主库进行验证,主库的IO线程根据从库slave的线程请求,从master.info开始记录的位置点向下开始取信息,同时把提取到的位置点和最新的位置与binlog信息一同发给从库IO线程,从库将相关的sql语句放在relay_log中,最终从库的sql线程会将relay_log里的sql语句应用到从库上,至此同步过程完成,以后一直循环此过程。
对于异步复制而言,主库将事务的Binlog事件写入到binlog文件中,此时主库会通知下dump线程发送这些新的binlog然后主库会继续处理提交操作,而此时并不保证这些日志会传输到任何一个从库的节点上。

全同步复制:

(Fully synchronous replication)。当主库执行完一个事务,所有的从库都执行了该事务才会将结果返回给客户端。这样保证了数据的安全性,但是因为需要等待所有从库执行完该事务才能返回客户端结果,所以全同步复制的性能必然会受到很大的影响。
对于全同步复制而言,当主库提交一个事务后,要求所有从库节点必须收到,执行并提交这些事务,然后主库线程才能继续做后续操作,而因此带来的问题就是主库完成一个事务的时间被大幅度拉长,性能降低。

半同步复制:


(Semi synchronous replication)。介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时也会造成一定程度的延迟,这个延迟为一个TCP/IP往返的时间。所以半同步复制需要在低延时的网络中使用。
对于半同步复制而言,是介于同步复制和异步复制之间的一种,主库需要等待至少一个从库节点收到并且刷新binlog到relay日志中,主库不需要等待所有从库给主库反馈,同时这里只是收到反馈而不死和完全执行并且提交事务的反馈,这样会节省很多的时间。

 主库上安装插件

install plugin rpl_semi_sync_master soname 'semisync_master.so';

查询数据库插件:mysql>show plugins;

#启用半同步

mysql>set global rpl_semi_sync_master_enabled=1; 

#查询同步

mysql>show global variables like '%rpl_semi%';

master服务器/etc/my.cnf里加入:

rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1second
socket=/data/mysql/mysql.sock
port = 3306
open_files_limit = 8192
log_bin
server_id=1
expire_logs_days = 7
gtid-mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1second
innodb_buffer_pool_size = 512M
character-set-server=utf8

从库安装插件

mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

mysql>show plugins;

#启用半同步,#(0/1) -->1是开启状态,0 是关闭状态

mysql>set global rpl_semi_sync_slave_enabled=1;

#查询

mysql>show global variables like '%rpl_semi%';

slave服务器/etc/my.cnf里加入:

rpl_semi_sync_slave_enabled=1

socket=/data/mysql/mysql.sock
port = 3306
server_id = 2
log_bin
gtid-mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
rpl_semi_sync_slave_enabled=1
open_files_limit = 8192
innodb_buffer_pool_size = 512M
character-set-server=utf8

MySQL8.0关闭binlog,在my.cnf下加入

#skip-log-bin
skip-log-bin

从库优化之InnoDB引擎库修改刷盘方式

innodb_flush_log_at_trx_commit:是 InnoDB引擎特有的,ib_logfile的刷新方式( ib_logfile:记录的是redo log和undo log的信息)

取值:0/1/2
innodb_flush_log_at_trx_commit=0,表示每隔一秒把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。也就是说一秒之前的日志都保存在日志缓冲区,也就是内存上,如果机器宕掉,可能丢失1秒的事务数据。cndba.cn/hbhe0316/article/22631

innodb_flush_log_at_trx_commit=1,表示在每次事务提交的时候,都把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升。cndba.cn/hbhe0316/article/22631

innodb_flush_log_at_trx_commit=2,表示在每次事务提交的时候会把log buffer刷到文件系统中去,但并不会立即刷写到磁盘。如果只是MySQL数据库挂掉了,由于文件系统没有问题,那么对应的事务数据并没有丢失。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,数据库的事务数据可能丢失1秒之类的事务数据。这样的好处,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存中,对底层IO没有压力)。
原文链接:https://blog.csdn.net/wenchun001/article/details/131397065

半同步复制的条件:


必要条件
1)MySQL5.5及以上版本
2)变量have_dynamic_loading 为YES(查看命令:show variables like "have_dynamic_loading";)
3)主从复制已经存在(即提前部署mysql主从复制环境,主从同步要配置基于整个数据库的,不要配置基于某个库的同步,即同步时不要过滤库)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zookeeper:什么是Zookeeper? ①

一、Zookeeper是什么 Zookeeper是一个开源的分布式协调服务框架,它是一个为分布式应用提供一致性服务的软件。 Zookeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是G…

Linux更新Firefox 52后突然没声音了?

如果你是一名 Linux 用户,将 Firefox 浏览器升级到了最新的 v52,却发现浏览器不再能播放声音了,你不是唯一遇到这个问题(http://www.omgubuntu.co.uk/2017/03/firefox-52-no-sound-pulseaudio-alsa-linux?_utm_source1-2-2&#…

产品的0到1怎么做的?(一)

要想做好产品,不是学一下Axure和墨刀就可以做产品了,那只是术的冰山一解,要想做好产品首先要从道、法、器三维度展开,下面从道方向展开,分想自己的一点心得:道可以道,非常道,产品的道…

NR PDCP(一) overview

这篇开始理下NR PDCP的内容,上图是38.300有关PDCP的服务和功能概括截图。PDCP功能包括对user plane或control plane data的传输;维护PDCP SN;使用ROHC和EHC协议进行header压缩和解压缩;加密(防止窃听)和解密;完整性保护…

2、Redis7 十大数据类型(一)

命令官网 英文版:https://redis.io/commands/ 中文版:http://redis.cn/commands.html/ 1.1 类型说明 1.2 Key命令 命令不区分大小写,但是key区分 命令 说明 keys * //展示当前库的所有key exists key //判断某…

解决Word编号与标签之间间隙过大的问题

前言 今天在写文档时发现,当给标题设置中文编号(一、二、三…)后,编号与文字之间会产生一个非常大的间隙,使用的字体是“思源黑体M”,更换其他字体后依然如此,很不美观(如图所示&am…

(二十二)数据符号化——矢量数据符号化②

数据符号化——矢量数据符号化② 目录 数据符号化——矢量数据符号化② 3.统计符号设置4.组合符号设置 3.统计符号设置 在 ArcMap 中可以使用符号系统来设置和定制地图元素的样式、颜色和标注。其中,统计符号可以用于表示一个或多个统计值的分布情况和趋势。 这是…

数据结构第六章 图 6.1-6.3 错题整理

6.1 6.C 加上一个点实现非连通 去除每个边都是一颗不同的生成树 一共n条边 13.C n个顶点、e条边的无向图,森林。树的角度看,除了根节点没有一条边与其对应,其他顶点都对应一条边,用顶点-边得出有多少颗树 14.A II 等于 也可以…

Git 分布式版本控制

Git概述 Git是分布式版本控制系统,可以快速高效地处理各种项目。具有廉价的本地库,方便的暂存区和多个工作流分支等特性。 版本控制目的:个人开发过渡到团队协作 分布式版本控制系统的优点: 1、服务器断网的情况下也可以…

DELL戴尔笔记本电脑Dell G5 15 5587原厂Win10系统镜像,原装OEM预装专用系统,恢复出厂状态

dell戴尔笔记本电脑,Dell G5 15 5587原厂Windows10系统镜像,原装OEM预装专用系统,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件等预装程序 链接:https://pan.baidu.com/s/1Av93lwhHR16SRGJAf__NAg?pwdkqkc 提取码:kq…

maven官网下载,中央仓库官网,搜索官网

maven 官网 https://maven.apache.org/ maven 下载 https://maven.apache.org/ maven 各版本下载 maven中央仓库 https://repo.maven.apache.org/maven2/ maven 搜索jar文件版本 https://mvnrepository.com/ 阿里镜像官网, https://developer.aliyun.com/mirro…

iPhone手机如何添加桌面便签软件小组件?

iPhone手机的小组件功能受到了很多用户的喜爱,它可以让用户更加快捷的查看到APP里面的部分相关内容。这项功能和便签软件结合起来之后,甚至能产生1加1大于二的效果。那么iPhone手机如何添加桌面便签软件小组件呢?以iPhone手机端敬业签桌面便签…

Day 56 kMeans 聚类

代码: package dl;import java.io.FileReader; import java.util.Arrays; import java.util.Random; import weka.core.Instances;/*** kMeans clustering.*/ public class kMeans {/*** Manhattan distance.*/public static final int MANHATTAN 0;/*** Euclidea…

react中基于腾讯地图的地图选点,地址搜索逆向定位获取经纬度

react中基于腾讯地图的地图选点,地址搜索逆向定位获取经纬度 效果示例图地图组件tencentMap/index.jsx样式map.scss 使用案例 效果示例图 地图组件tencentMap/index.jsx import { useEffect, useRef, useState } from "react"; import "./map.scss&…

PHP函数、数组和错误处理:简单实用的开发技巧和错误处理方法

目录 PHP函数 函数的基本概念: 函数定义语法: 函数命名关系: 参数详解 形参 实参 ​编辑 默认值 引用传递 函数体 函数返回值 作用域 静态变量 可变函数 匿名函数 基本概念 闭包 伪类型 库函数 有关输出的函数 有关时间…

Linux守护进程详解、范例演示 ( 6 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

gitee 上传、下载代码

gitee push 代码 四步走 $ git add . $ git commit -m "修改了什么东西,改了哪个bug,加了一条long服务" $ git remote add origin https://gitee.com/666666666666666666.git $ git push -u origin master1. 先安装git ,自行百度 …

大数据到底要学习一些什么内容

大数据本质上是海量数据。 以往的数据开发,需要一定的Java基础和工作经验,门槛高,入门难。 如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言…

Spring Boot 中的 @CachePut 注解是什么,原理,如何使用

Spring Boot 中的 CachePut 注解是什么,原理,如何使用 简介 在 Spring Boot 中,CachePut 注解是用于缓存的注解之一,用于更新缓存中的数据。相比于 Cacheable 注解,CachePut 注解可以用于更新缓存中的数据&#xff0…

鞍山万象汇钢都夜巷3.0炫目回归——“钢刚好”遇见快乐

6月21日晚,鞍山万象汇钢都夜巷3.0市集快意回归,盛大启幕。在清爽宜人的晚风里、在热烈肆意的旋律中,这一场以快乐为基调的暑期市集,正式奏响钢都夏夜狂欢的乐章。汇聚多元场景,搜罗热门美食,消解盛夏酷暑&a…