5、mysql的读写分离

主从复制

主从复制的含义

主从复制:在一个mysql的集群当中,至少3台,即主1台,从2台。

当有数据写入时,主负责写入本库,然后把数据同步到从服务器。

一定是在主服务器写入数据,从服务器的写入数据不会同步到集群。

主从复制的模式

1、异步复制:mysql的默认复制方式,主在执行完客户端提交的数据之后,结果会立即返回给客

户端,主库不关心数据是否被从库接受和处理的。主库如果崩溃,主库的未提交数据可能不能同步

到从库,可能导致数据的不完整,可以使用MHA进行故障切换。

2、全同步复制:主库执行完客户端提交的数据,从库也处理完了该数据,才会提交给客户端。需

要等到所有的库都完成写入,才能进行下一步操作。

3、半同步复制:介乎于全同步模式和异步模式之间,主库接受到写入操作,会等待至少一个从库

完成了写入之后才能返回给客户端。

主从复制当中的延迟问题

1、网络延迟:数据库尽量部署在同一地域的同一数据中心之间的相同的内网局域网。

2、硬件原因:磁盘的I/O性能,CPU的核心数,加大内存。尽量使用物理主机来部署数据库。

3、架构方面:我在配置好主从模式之后,尽量的保证所有的写入都是从主库完成。

4、mysql的配置:mysql的双一设置(配置/etc/my.cnf)

    1、innodb_flush_log_at_trx_commit=1

  • 1:每次提交事务时,都会刷新事务的日志,确保事务的持久性,提高了数据的安全性,但会降低了性能。
  • 0:事务提交时,不刷新日志,而是每秒进行一次刷新,性能提高了,安全相对低。
  • 2:事务提交时,事物的日志写入操作系统的内存,不进行物理刷新(不保存到硬盘)。

    2、sync_binlog=1

  • 1:每次提交事务时,二进制日志都会刷新到磁盘,确保日志的持久性。
  • 0:每次提交事务时,二进制日志写入操作系统的内存,不进行物理刷新。
  • N:每提交N次事务,就进行刷新。

   补充 :

   1、log-slave-updates=0

  • 不将从库的更新写入二进制日志,避免在主从复制陷入死循环。

    2、innodb_buffer_pool_size

  • 存储引擎的缓冲池的大小,增大空间可以提高整个数据库的性能。这个空间时占用内存的,大小的设置是内存的一半、或者3分之一。

主从复制实验

我们建立一个主从复制架构,如下:

主:mysql1,192.168.254.31

从1:mysql2,192.168.254.32

从2:mysql3,192.168.254.33

nginx1:amoba  jdk1.6

nginx2:客户端

1、配置主服务器的配置文件vim /etc/my.cnf,添加如下内容,并重启mysql服务

  • log-bin=master-bin            #开启二进制日志
  • log-slave-updates=true     #让从库可以从主库当中获取二进制日志的更新,写入到自己的日                                                志当中

2、配置两台从服务器的配置文件vim /etc/my.cnf,添加如下内容,并重启mysql服务

  • 主从服务器之间的server-id不能重复
  • relay-log=relay-log-bin                               #指定了从服务器上中继日志的文件
  • relay-log-index=slave-relay-bin.index        #中继日志索引文件的名称
  • relay_log_recovery = 1                             #指定了从服务器在启动时,是否执行中继日志的恢                                                                      复操作,保持数据的一致。

3、在主服务器上创建用户,用于主从之间通信

  • CREATE USER 'myslave'@'192.168.254.%' IDENTIFIED WITH mysql_native_password BY '123456';                                                                                                          #创建用户
  • GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.254.%' ;       #赋权
  • FLUSH PRIVILEGES;                                                                                     #刷新权限

4、获取主服务器二进制文件名和位置

5、开启从服务器同步,建立与主服务器的同步关系

CHANGE master to master_host='192.168.254.31',master_user='myslave',master_passwoword='123456',master_log_file='master-bin.000001',master_log_pos=857;

注意:从服务器同步到主服务器的二进制日志文件和位置要一致

6、开启slave并查看同步状态

  • Slave_IQ_Running:YES                 #和主库之间的读写的通信
  • Slave_SQL_Running:YES              #从库之间的sql进程

Slave_SQL_Running是no的原因:

  1. 网络不通(防火墙)
  2. my.cnf的配置文件有问题
  3. 文件名不对
  4. 位置不对

解决步骤:

  1. stop slave;
  2. reset slave;
  3. 重新获取主服务器二进制文件名和位置并开启从服务器同步
  4. start slave;
  5. show slave status\G;

7、终端测试是否同步

在主服务器的mysql终端创建库和表,检查是否在2台从服务器上同步

主从复制的工作过程

1、master节点开启二进制日志,master上的数据发生改变时,数据会写入二进制日志。

2、从节点会在一定时间的间隔内对主库的二进制日志进行探测,是否发生变化,有变化,开启一个I/O的线程,请求主库二进制日志的时间。

3、主库为每一个从库的I/O线程开启一个dump线程,用来向从库发生二进制日志的时间,从库保存到之间的中继日志,从库再启动sql的线程读取中继日志中的二进制日志,保存到本地。然后获取内容,写入到自己的库中。

读写分离

读写分离是建立在主从复制的基础之上

读写分离的方法

1、mysql-proxy

2、atlas:360内部自己研发的工具(基于AMOEBA),不对外公开的

3、Amoeba

读写分离实验

读写分离实验建立在主从复制的基础之上,根据上面主从复制的实验,我们继续,先在服务端

nginx1准备Amoeba源码包和相关的java版本文件,因为我们的Amoeba-2.2.0版本需要

java1.6.0_14的版本。

1、准备Amoeba源码包和相关的jdk.bin文件

将jdk文件复制到/usr/local/目录下,赋予他777权限并 ./jdk-6u14-linux-x64.bin 执行他,执行完之后会自动生成文件 jdk1.6.0_14。  

jdk1.6.0_14修改名字成jdk1.6,因为我们打算在配置全局变量文件里定死了他的路径如下图。

2、配置关于jdk全局变量vim /etc/profile,添加如下几行内容

保存退出后 source /etc/profile,使之立刻生效

生效之后查看下java版本是不是1.6.0_14的版本

3、解压并安装amoeba

首先我们在/usr/local/目录下创建目录amoeba,也是因为我们在全局配置文件里提前声明了路径。

然后我们直接解压amoeba源码包到/usr/local/amoeba/里,如下

解压完之后给amoeba目录赋权755,chmod -R 755 /usr/local/amoeba/

直接执行文件/usr/local/amoeba/bin/amoeba,显示start | stop表示我们读写分离的软件安装成功了

4、登录主从mysql三台服务器,都创建一个用户amoeba,用来远程连接amoeba

5、在服务端nginx1修改amoeba主配置文件

先修改主配置文件amoeba.xml,具体修改如下

  • #设定用户

  • #设定默认库和读写库

6、修改amoeba的数据库配置文件dbServers.xml,具体修改如下

  • #注释掉test库,默认是使用test库测试,由于我们没做test库,所以注释掉就行

  • #设定用户

  • #设定主库和从库服务器名和IP地址

7、启动amoeba,并查看断开起没起


8、回到三台主从服务器,都要修改MySQL主配置添加如下:

  • #打开MySQL服务器活动的日志记录

然后重启mysqld服务,并打开mysql_general.log日志,这时候三台主从服务器显示已经连上我们

nginx1的amoeba

9、在客户端nginx2上验证

先安装个amoeba的apt版验证即可,apt -y install mariadb-server

启动,systemctl restart mariadb.service

限制我们可以通过nginx1的amoeba访问mysql

这时候我们在客户端nginx2上操作数据库,读取数据都会在两台从服务器上轮询读取,写入会在主

服务器上进行,然后自动主从复制到两台从服务器上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高质量配音如何影响游戏的受欢迎度

在游戏行业中,创造沉浸式、引人入胜且令人难忘的体验往往决定了游戏的成功或失败。在影响游戏流行度的众多因素中,配音脱颖而出,成为将叙事与玩家互动连接起来的重要元素。高质量的配音将游戏中的对白转化为游戏的活跃部分,让玩家…

鸿蒙-expandSafeArea使用

应用未使用setWindowLayoutFullScreen()接口设置窗口全屏布局时,默认使能组件安全区布局。可以使用expandSafeArea属性扩展安全区域属性进行调整 扩展安全区域属性原理 布局阶段按照安全区范围大小进行UI元素布局。布局完成后查看设置了expandSafeArea的组件边界&…

Java测试开发平台搭建(四)拦截器

1. 拦截器的作用及使用场景 能够在请求的生命周期的不同阶段进行拦截和处理。常见的使用场景包括:1. 日志记录:记录请求和响应的日志。 2. 权限验证:检查用户的登录状态、权限。 3. 性能监控:记录请求的处理时间,监控…

window安装TradingView

目录 下载安装包 修改文件后缀,解压 将K线换成国内涨红跌绿样式 下载安装包 https://www.tradingview.com/desktop/ 下载完成后是.msix格式文件 (我在win10和win11的系统中尝试运行msix都没有成功,所以放弃直接双击运行msix&#xff…

电子应用设计方案70:智能挂钟系统设计

智能挂钟系统设计 一、引言 随着科技的不断发展,传统挂钟也逐渐向智能化方向演进。智能挂钟不仅能够准确显示时间,还具备多种实用功能和智能交互特性,为用户带来更便捷、丰富的体验。 二、系统概述 1. 系统目标 - 高精度显示时间&#xff0…

vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0

一、vueelementui实现下拉表格多选搜索1.0 二、vueelementui实现下拉表格多选搜索分页回显全选2.0 在1.0的基础上,终于可以实现在下拉框表格分页的前提下不同页码的回显辣,分页是前端来分页的(代码略乱且没有封装还很长,随便看看…

被裁20240927 --- 嵌入式硬件开发 前篇

前篇主要介绍一些相关的概念,用于常识扫盲,后篇开始上干货! 他捧着一只碗吃过百家的饭 1. 处理器芯片1.1 处理器芯片制造商一、 英特尔(Intel)二、 三星(SAMSUNG)三、 高通(Qualcomm…

【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)

最近在忙联通的安全准入测试,很少有时间看CTF了,今晚抽点时间回顾下上周线下的题(期末还没开始复习😢) 感觉做渗透测试一半的时间在和甲方掰扯&水垃圾洞,没啥惊喜感,还是CTF有意思 目录 Mountain ez_zhuawa 图…

高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容

预览 第1步:理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…

保护模式基本概念

CPU 架构 RISC(Reduced Instruction Set Computer) 中文即"精简指令集计算机”。RISC构架的指令格式和长度通常是固定的(如ARM是32位的指令)、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕 CISC&…

@vue/cli启动异常:ENOENT: no such file or directory, scandir

参考:https://blog.csdn.net/qq_44355188/article/details/122239566 首先异常报错是:ENOENT: no such file or directory, scandir ‘D:\Data\Project\VueProject\hello\node_modulesvue\cli-plugin-eslint\locales’;我的vue/cli版本是 4.5.15 重点是…

全视通物联数据中台解决方案助力智慧医院新时代

全国医院物联网大会系列活动暨【行走的课堂】标杆研学 四川站“医院物联网应用创新经验交流会”,近日在成都召开。珠海全视通信息技术有限公司总经理林三朝以《物联网技术助力医院高质量发展》为题做了精彩演讲。林总就物联网技术如何助力医院高质量发展&#xff0c…

QT程序发布后,mysql在其它电脑设备无法连接数据库

QT程序发布后,mysql在其它电脑设备无法连接数据库 D:\mysql-5.7.24-winx64\lib, mysql-5.7.24-winx64是一个压缩包,用于启动mysql服务,创建数据库 压缩包 解决方法: 拷贝库到exe的相同目录,libmysql.dll,libmysql.li…

vulnhub靶场-matrix-breakout-2-morpheus攻略(截止至获取shell)

扫描出ip为192.168.121.161 访问该ip,发现只是一个静态页面什么也没有 使用dir dirsearch 御剑都只能扫描到/robots.txt /server-status 两个页面,前者提示我们什么也没有,后面两个没有权限访问 扫描端口,存在81端口 访问&#x…

CNN、RNN、LSTM和Transformer之间的区别和联系

文章目录 CNN、RNN、LSTM和Transformer之间的区别和联系前言CNN(卷积神经网络)RNN(循环神经网络)LSTM(长短期记忆网络)Transformer四者之间的联系与区别Yolo算法简介Yolo和CNN的关系YOLO各版本 CNN、RNN、L…

f(f(x))=x^2 -11x+36, 求f(6)的值,

偶然看到的一个题目,一时兴起,做了一下。题目如下 简单粗暴的思路是待定系数法,盲猜f(x)是个2次函数,令f(x)ax^2bxc ,带入原式,发现矛盾(计算略)就想放弃了。 忽然看到如果带入6 的话&#xf…

微软远程桌面APP怎么用

微软远程桌面(Remote Desktop)客户端(RD Client)是一款由微软开发的应用程序,允许用户通过网络连接远程访问和控制另一台计算机。同时,微软远程桌面RD Client支持多种设备和操作系统,包括Window…

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据,预测房价中值。 环境要求: ancondajupyter notebookpython3.10.10 虚拟环境: pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…

PPO算法基础(一)

PPO近端策略优化算法 我们今天还是主要来理解PPO算法的数学原理。PPO是一种策略梯度方法,简单的策略梯度对每个样本(或者一组样本)进行一次梯度更新,对单个样本执行多个梯度步骤会导致一些问题,因为梯度偏差太大&…

LabVIEW软件开发的未来趋势

LabVIEW软件开发的未来趋势可以从以下几个方面来分析: ​ 1. 与AI和机器学习的深度结合 趋势:LabVIEW正在向集成AI和机器学习方向发展,尤其是在数据处理、预测性维护和自动化控制领域。 原因:AI技术的普及使得实验和工业场景中的…