mysql主从复制和读写分离

在企业应用中,成熟的业务通常数据量都比较大

单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求

配置多台主从数据库服务器以实现读写分离

所以要做主从服务器,保证安全性

做一写一读服务器,将提升性能

1、什么是读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。

2、什么时候要读写分离

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

3、主从复制与读写分离

在实际的生产环境中,数据库服务器进行读和写,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

主从复制的目的:把在主服务器上输入的同步给从服务器mysql

读写分离的目的:在主服务器上写,在从服务器上读,提高性能

4、mysql支持的复制类型

(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,优点:mysql默认采用基于语句的复制,执行效率高。缺点:在高并发情况下,命令顺序会混乱,导致主从服务器的数据不一致
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。优点:精确性高,缺点:效率慢,占用空间大
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

5、主从复制的工作过程

  • master(Binlog dump thread)

  • slave(I/O thread 、SQL thread)

  • Master 的一条线程

  • Slave 中的两条线程

(1)Master节点将数据的改变记录成二进制日志(bin log),当Master上的数据发生改变时,则将其改变写入二进制日志中。
(2)Slave节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求 Master的二进制事件。
(3)同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至Slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成 sql 语句逐一执行,使得其数据和 Master节点的保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。

7.搭建 MySQL主从复制

1.主从服务器时间同步

yum install ntp -y
# 安装ntpvim /etc/ntp.conf
# 修改ntp配置文件,在最后添加server 127.127.80.0					
#设置本地是时钟源,注意修改网段
fudge 127.127.80.0 stratum 8				
#设置时间层级为8(限制在15内)service ntpd start
# 启动时间同步

yum install ntp ntpdate -y
# 从服务器安装service ntpd start
/usr/sbin/ntpdate 192.168.64.10			
# 和主服务器进行时间同步crontab -e
# 设置定时任务
*/30 * * * * /usr/sbin/ntpdate 192.168.64.10
# 每半小时执行一次时间同步

2.主服务器的mysql配置

vim /etc/my.cnf
# 在server-id=1下添加log-bin=mysql-bin                #添加,主服务器开启二进制日志
binlog_format=mixed

#选配项    
expire_logs_days=7          #设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M    #设置二进制日志限制大小,如果超出给定值,日志就会发生滚                                                  动,默认值是1GB
skip_slave_start=1            #阻止从库崩溃后自动启动复制,崩溃后再自动复制可能会导致数                                              据不一致的

"双1设置",数据写入最安全
innodb_flush_logs_at_trx_commit=1        

                                          #redo log(事务日志)的刷盘策略,每次事务提交时MySQL都会                                              把事务日志缓存区的数据写入日志文件中,并且刷新到磁盘中,                                              该模式为系统默认
sync_binlog=1                   #在进行每1次事务提交(写入二进制日志)以后,Mysql将执行                                                一次fsync的磁盘同步指令,将缓冲区数据刷新到磁盘

systemctl restart mysqldmysql -u root -pabc123
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.64.%' IDENTIFIED BY '123456';			# 创建用户供服务器登录
FLUSH PRIVILEGES;

3.从服务器的mysql配置

vim /etc/my.cnfserver-id = 2
#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin
#开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=relay-log-bin.index
#定义中继日志文件的位置和名称,一般和relay-log在同一目录

systemctl restart mysqldmysql -u root -pabc123CHANGE master to master_host='192.168.64.10',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=451;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致

start slave;						#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态

延迟的产生

当主库的TPS并发较高时,由于主库上面是多线程写入的,而从库的SQL线程是单线程的,导致从库SQL可能会跟不上主库的处理速度(生产者比消费者快,导致商品堆积)。

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

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

相关文章

Redis Cluster Gossip Protocol: PING, PONG, MEET

返回目录 PING / PONG / MEET 的发送 过程 计算freshNodes。freshNodes表示在消息中能携带的,在cluster节点字典中的节点总数,但需要减去myself和对端节点,因为myself的信息会存储在消息头中。实际上,并非所有在cluster节点字典…

IPv4 、IPv6

以下是一个简单的表格,用于比较IPv4和IPv6的主要区别: 特性IPv4IPv6地址表示32位二进制数,点分十进制表示128位二进制数,冒号分隔的16进制表示地址长度32位(约42亿个可能的地址)128位(几乎无限…

C语言中的异常处理机制是什么?

C语言中的异常处理机制 C语言是一门强大而灵活的编程语言,它为程序员提供了广泛的控制权和自由度。然而,C语言本身并不提供像其他高级语言一样的内置异常处理机制,如Java中的try-catch或Python中的异常处理。因此,C语言程序员需要…

中间件中使用到的设计模式

本文记录阅读源码的过程中,了解/学习到中间件使用到的设计模式及具体运用的组件/功能点 1. 策略模式 1. Nacos2.x中grpc处理时通过请求type来进行具体Handler映射,找到对应处理器。 2. 模板模式 1. Nacos配置数据读取,内部数据源、外部数据…

隐私交易成新刚需,Unijoin 凭什么优势杀出重围?

随着区块链技术的普及和发展,全球加密货币用户在持续增长,根据火币研究院公布的数据,2022年全球加密用户已达到 3.2亿人,目前全球人口总数超过了 80亿,加密货币用户渗透率已达到了 4%。 尤其是在 2020 年开启的 DeFi 牛…

如何像人类一样写HTML之图像标签,超链接标签与多媒体标签

文章目录 前言一、图像标签1.1 什么是图像标签?2.2 如何使用图像标签? 二、超链接标签2.1 什么是超链接标签?2.2 如何使用超链接标签? 三、多媒体标签3.1 什么是多媒体标签?3.2 如何使用多媒体audio标签?3.…

Python入门教程 | Python 常用标准库概览

Python3 标准库概览 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,使用标准库我们可以让您轻松地完成各种任务。 以下是一些 Python3 标准库中的模块: os 模块:os 模块提供了许多与操作系统交互的函数,例如创…

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…

多线程 - 单例模式

单例模式 ~~ 单例模式是常见的设计模式之一 什么是设计模式 你知道象棋,五子棋,围棋吗?如果,你想下好围棋,你就不得不了解一个东西,”棋谱”,设计模式好比围棋中的 “棋谱”. 在棋谱里面,大佬们,把一些常见的对局场景,都给推演出来了,照着棋谱来下棋,基本上棋力就不会差到哪…

TAADpapers的工具包用到的lru是lru-dict

TAADpapers的工具包用到的lru是lru-dict 运行时提示:no model named lru 安装lru时报错详情: (textattack-master) G:\xxx\TextAttack-master>pip install lru Collecting lruUsing cached lru-0.1.tar.gz (1.1 kB)Preparing metadata (setup.py) ..…

docker-compose一键启动neo4j

下载镜像 docker pull neo4j:3.5.22-community 编写配置文件 参考文档 编写docker-compose.yml文件 version: "3"services:neo4j:image: neo4j:3.5.22-communitycontainer_name: neo4j restart: alwaysports:- 7474:7474- 7687:7687environment:- NEO4J_AUTH:ne…

Scala第十五章节

Scala第十五章节 1. 递归 2. 案例一: 求阶乘 3. 案例二: 斐波那契数列 4. 案例三: 打印目录文件 scala总目录 文档资料下载

机器学习必修课 - 如何处理缺失数据

运行环境:Google Colab 处理缺失数据可简单分为两种方法:1. 删除具有缺失值的列 2. 填充 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 import pandas as pd from sklearn.model_selection import train_test_split导…

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

C语言实例_调用SQLITE数据库完成数据增删改查

一、SQLite介绍 SQLite是一种轻量级的关系型数据库管理系统(RDBMS),它是一个开源的、零配置的、服务器端的、自包含的、零管理的、事务性的SQL数据库引擎。它被广泛应用于嵌入式设备、移动设备和桌面应用程序等领域。 SQLite的特点包括&…

SpringBoot快速入门

搭建SpringBoot工程,定义hello方法,返回“Hello SpringBoot” ②导入springboot工程需要继承的父工程;以及web开发的起步依赖。 ③编写Controller ④引导类就是SpringBoot项目的一个入口。 写注解写main方法调用run方法 快速构建SpringBoo…

MySQL体系结构和四层架构介绍

MySQL体系结构图如下: 四层介绍 1. 连接层: 它的主要功能是处理客户端与MySQL服务器之间的连接(比如Java应用程序通过JDBC连接MySQL)。当客户端应用程序连接到MySQL服务器时,连接层对用户进行身份验证、建立安全连接并管理会话状态。它还处理…

python获取时间戳

使用 datetime 库获取时间。 获取当前时间: import datetime print(datetime.datetime.now()) . 后面的是微秒,也是一个时间单位,1秒1000000微秒。 转为时间戳: import datetimedate datetime.datetime.now() timestamp date…

小谈设计模式(14)—建造者模式

小谈设计模式(14)—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品(Product)抽象建造者(Builder)具体建造者(Concrete Builder)指挥者(Director&#xff0…

5G 技术、云原生开发和机器学习是推动物联网解决方案的重要助力

作者:Arm高级副总裁兼物联网事业部总经理 Paul Williamson 每次谈及物联网 (IoT),行业就会明显出现两大阵营:乐观派和悲观派。后者将物联网认定为“尚属未来”的技术。而我个人是坚定的乐观派:对于物联网解决方案有望带来的变革性…