当前位置: 首页 > news >正文

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上操作数据库,读取数据都会在两台从服务器上轮询读取,写入会在主

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

相关文章:

5、mysql的读写分离

主从复制 主从复制的含义 主从复制:在一个mysql的集群当中,至少3台,即主1台,从2台。 当有数据写入时,主负责写入本库,然后把数据同步到从服务器。 一定是在主服务器写入数据,从服务器的写入…...

uniapp Native.js原生arr插件服务发送广播到uniapp页面中

前言 最近搞了个设备,需求是读取m1卡,厂家给了个安卓原生demo,接入arr插件如下,接入后发现还是少了一部分代码,设备服务调起后触发刷卡无法发送到uniapp里。 中间是一些踩坑记录,最后面是解决办法&#xf…...

如何在 Ubuntu 22.04 上安装 Elasticsearch

简介 在本教程中,你将学习如何在 Ubuntu 22.04 服务器上安装 Elasticsearch。此外,你还将学习如何使用 Elasticsearch REST API 索引和操作数据。 Elasticsearch 是一个基于 Apache Lucene Library 的免费分布式搜索和分析引擎。它是一个快速且可扩展的…...

单片机长耗时前后台任务优化

代码: void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…...

Linux大数据方向shell

一、概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核,还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...

爬虫 APP 逆向 ---> shopee(虾皮) 电商

shopee 泰国站点:https://shopee.co.th/ shopee 网页访问时,直接弹出使用 app 登录查看,那就登录 shopee 泰国站点 app。 手机抓包:分类接口 接口:https://mall.shopee.co.th/api/v4/pages/get_category_tree 请求参…...

axios 常见的content-type、responseType有哪些?

一、Content Type Content Type ,也被称为MIME类型(Multipurpose Internet Mail Extensions),是一种用于标识数据格式的机制。在HTTP协议中,Content Type’通常通过请求或响应头部的’Content-Type’字段来指定。这个…...

从零开始C++游戏开发之第七篇:游戏状态机与回合管理

在游戏开发的道路上,状态管理是一个无法绕开的重要课题。尤其是在棋牌类游戏中,游戏的进行需要有条不紊地按照回合推进,同时管理多个游戏状态,如“等待玩家加入”、“游戏进行中”、“结算阶段”等。如何优雅且高效地实现这些逻辑…...

【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程

开发工具:IntelliJ IDEA 部署环境: Tomcat8.x Mysql5.6 JDK1.8 Maven3.x Redis ZooKeeper3.4。 本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持多端 H5AndroidIOS PC端使用:vueelementui 用户端使用:uniapp 管理端使用&#xff1a…...

mac启ssh服务用于快速文件传输

x.1 在mac上启SSH服务 方法一:图形交互界面启ssh(推荐) 通过sharing - advanced - remote login来启动ssh;(中文版mac应该是 “系统设置 → 通用 → 共享”里打开“远程登录”来启动) 查看自己的用户名和…...

《探索 Apache Spark MLlib 与 Java 结合的卓越之道》

在当今大数据与人工智能蓬勃发展的时代,Apache Spark MLlib 作为强大的机器学习库,与广泛应用的 Java 语言相结合,为数据科学家和开发者们提供了丰富的可能性。那么,Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...

使用 Python 创建多栏 Word 文档 – 详解

目录 引言 一、工具与安装 二、Python 在 Word 中创建简单的多栏布局 三、Python 在 Word 文档的栏间添加分隔线 四、Python 从Word文档的指定位置开启多栏设置 五、Python 为多栏 Word 文档的各栏添加页码 引言 在文档设计中,排版不仅决定了内容的呈现方式&…...

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…...

Mysql的MHA高可用及故障切换

Mysql的MHA高可用及故障切换 MHA主从复制的单点问题配置1. 主从复制2. MHA高可用安装MHA的组件配置无密码认证manager节点配置manager节点上测试启动连接 故障切换模拟恢复 MHA master high availability 建立在主从复制基础之上的故障切换的软件系统。 主从复制的单点问题 …...

【ES6复习笔记】箭头函数(5)

简介 本教程将介绍如何在 JavaScript 中使用箭头函数,包括箭头函数的基本语法、特点以及在实际开发中的应用。通过本教程,你将学会如何使用箭头函数来简化代码,提高代码的可读性和简洁性。 箭头函数的基本语法 箭头函数是 ES6 引入的一种新…...

单片机学习笔记——入门51单片机

一、单片机基础介绍 1.何为单片机 单片机,英文Micro Controller Unit,简称MCU 。内部集成了中央处理器CPU、随机存储器ROM、只读存储器RAM、定时器/计算器、中断系统和IO口等一系列电脑的常用硬件功能 单片机的任务是信息采集(依靠传感器&a…...

Docker Run使用方法及参数详细说明

Docker Run使用方法及参数详细说明 基本语法常用参数使用示例总结Docker Run是Docker中最基本的命令之一,用于创建并启动一个新的容器。通过Docker Run,用户可以基于指定的镜像创建一个容器实例,并且可以配置容器的各种参数,如网络设置、存储选项等。下面将详细介绍Docker …...

面试场景题系列:设计限流器

首先看看使用API限流器的好处。 •预防由拒绝服务攻击(Denial of Service,DoS)引起的资源耗尽问题。大型科技公司发布的所有API几乎都强制执行某种形式的限流操作。例如,推特限制每个用户每3小时最多发300条推文。谷歌文档API的默认限制是每个用户每60秒…...

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 (1)资源介绍 🔅原理图 🔅STS30-DIS-B 🌙引脚分配 🌙通信 🌙时钟拉伸(Clock Stretching) 🌙单次触发模式 🌙温度数据转…...

网狐旗舰版源码搭建概览

简单的列一下: 服务端源码内核源码移动端源码核心移动端源码AI控制工具源码多款子游戏源码前端、管理后台、代理网站源码数据库自建脚本UI工程源码配置工具及二次开发帮助文档 编译环境要求 VS2015 和 Cocos3.10 环境,支持移动端 Android 一键编译&am…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...