MySQL-主从复制与读写分离

news/2024/6/15 16:32:45/文章来源:https://blog.csdn.net/m0_75067030/article/details/137111134

一、MySQL主从复制:

1、主从复制的作用:

主从复制:主设备通过二进制日志传输到从设备,从设备通过二进制日志和主同步数据

作用:负载均衡读操作,备份(实时备份,不能替换手动的备份),高可用和故障切换,数据分布,Mysql升级。

2.主从复制的原理:

  1. 主数据库处理用户写操作,从数据库处理用户读操作
  2. 用户写入数据到主数据库时,主数据库更新数据并写入二进制日志(binlog)中。
  3. 主数据库开启dump线程一边读取二进制日志一边通过网络将日志传输给从数据库
  4. 从数据库通过io线程接收二进制日志并保存为中继日志
  5. 从数据库开启sql线程将中继日志写入从数据库主从数据库复制完成。

 3.三个重要线程:

dump线程:由主数据库开启,用于读取主的二进制日志并传输给从数据库 。

io线程:由从数据库开启,用于接收二进制日志并保存为中继日志。

sql线程:由从数据库开启,用于将中继日志写入备数据库中完成主从复制。

4.主从复制的实现:

1.环境准备:

master服务器: 192.168.91.3   
slave1服务器: 192.168.91.5	
slave2服务器: 192.168.91.7

关闭防火墙和防护:

systemctl stop firewalld
setenforce 0

2. mysql主从服务器时间同步:

yum install ntp -yvim /etc/ntp.conf
--末尾添加--
server 127.127.10.0							#设置本地是时钟源127.127 ,注意修改网段 10网段
fudge 127.127.10.0 stratum 8				#设置时间层级为8(限制在15内)service ntpd start

3.从服务器配置:

yum install ntp ntpdeta -yservice ntpd start
/usr/sbin/ntpdate 192.168.91.3				#进行时间同步crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.91.3

安装:

开启服务:

指定与主服务器时间同步:

制定周期性任务:

 

4.主服务器MySQL配置:

vim /etc/my.cnf
server-id = 1
log-bin=master-bin							#添加,主服务器开启二进制日志
binlog_format = MIXED
log-slave-updates=true						#添加,允许slave从master复制数据时可以写入到自己的二进制日志

重启成功:

systemctl restart mysqldmysql -u root -pabc123
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.91.%' IDENTIFIED BY '123';			
#给从服务器授权
FLUSH PRIVILEGES; ## 刷新权限show master status;

授权命令: 

刷新权限:

5.从服务器的mysql配置:

5.1 第一台从服务器:
vim /etc/my.cnf
server-id = 2					#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin						#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relya-bin.index		#添加,定义中继日志文件的位置和名称,一般和relay-log在同一目录
relay_log_recovery = 1                      #选配项
#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。#重新启动mysql配置文件
systemctl restart mysqld.service
systemctl restart mysqldmysql -u root -p123456CHANGE master tomaster_host='192.168.91.3',master_user='myslave',master_password='123',master_log_file='masterbin.000001',master_log_pos=603;		
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致start slave;						#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes				#负责与主机的io通信
Slave_SQL_Running: Yes				#负责自己的slave mysql进程

 

5.2 第二台服务器:
vim /etc/my.cnf
server-id = 3					#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin						#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relya-bin.index		#添加,定义中继日志文件的位置和名称,一般和relay-log在同一目录
relay_log_recovery = 1                      #选配项
#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。
#重启服务器:
systemctl restart mysqld.service
systemctl restart mysqldmysql -u root -p123456CHANGE master tomaster_host='192.168.91.3',master_user='myslave',master_password='123',master_log_file='masterbin.000001',master_log_pos=603;		
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致start slave;						#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes				#负责与主机的io通信
Slave_SQL_Running: Yes				#负责自己的slave mysql进程

一般 Slave_IO_Running: No 的可能性:

1、网络不通
2、my.cnf配置有问题
3、密码、file文件名、pos偏移量不对
4、防火墙没有关闭

6.验证:

6.1 在主服务器新建表:

插入数据:

查看:

6.2 第一台从服务器查看:

查看数据:

6.3 第二台从服务器查看:

查看数据:

二、 MySQL 读写分离:

1.mysql读写分离原理:

  • 读写分离就是只在主服务器上写 ,只在从服务器上读
  • 主数据库处理事务性查询,从数据库处理select查询;
  • 数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库

2.读写分离的实现:

 环境准备:

在上个实验的基础上添加amoeba服务器:

Amoeba(192.168.91.4)
Amoeba服务器配置

1.配置amoeba服务器:

因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
将jdk-6u14-linux-x64.bin 和 amoeba-mysql-binary-2.2.0.tar.gz.0 上传到/opt目录下。cd /opt/
放入jdk安装包和amoeba安装包
chmod +x jdk-6u14-linux-x64.bin 
./jdk-6u14-linux-x64.bin
按空格到最后一行
按yes,在按enter

mv jdk1.6.0_14/ /usr/local/jdk1.6vim /etc/profile  ##存放的是jdk环境变量
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile  # 刷新环境变量
java -version # 查看java jdk

在最下方添加:

##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/chmod -R 755 /usr/local/amoeba//usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop 说明安装成功

2.服务器上配置 Amoeba读写分离,两个 Slave 读负载均衡:

grant all on *.* to test@'192.168.91.%' identified by 'abc123';
【在一主量从上都要配置】

主:

一从:

二从:

3.amoeba服务器配置amoeba服务:

cd /usr/local/amoeba/conf/cp amoeba.xml amoeba.xml.bak
vim amoeba.xml									#修改amoeba配置文件30修改
<property name="user">amoeba</property>32修改
<property name="password">abc123</property>115修改
<property name="defaultPool">master</property>117去掉注释–
<property name="writePool">master</property>
<property name="readPool">slaves</property>cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改数据库配置文件--23行--注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->
--26--修改
<property name="user">test</property>
--28-30--去掉注释
<property name="password">123.com</property>
--45--修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.10.10</property>
--52--修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.10.12</property>
--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.10.17</property>
--65行--修改
<dbServer name="slaves" virtual="true">
--71行--修改
<property name="poolNames">slave1,slave2</property>/usr/local/amoeba/bin/amoeba start &					#启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java							#查看8066端口是否开启,默认端口为TCP 8066

vim dbServers.xml

4.测试读写分离:

使用yum快速安装MySQL虚拟客户端:

yum install -y mariadb-server mariadb
systemctl start mariadb.service
mysql -u amoeba -pabc123 -h 192.168.91.4 -P8066		#通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从服务器

从1 :

从2: 

轮询测试: 

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

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

相关文章

(QT5142、OpenCV452、SeetaFace2 )facetest

服务端 .pro QT core gui network sql#window平台opencv&#xff0c;seetaface环境 win32{ LIBS C:\opencv452\x64\mingw\lib\libopencv* LIBS C:\SeetaFace\lib\libSeeta* INCLUDEPATH C:\opencv452\include INCLUDEPATH C:\opencv452\include\opencv2 INCLUDEPATH …

技术分享 | 如何写好测试用例?

对于软件测试工程师来说&#xff0c;设计测试用例和提交缺陷报告是最基本的职业技能。是非常重要的部分。一个好的测试用例能够指示测试人员如何对软件进行测试。在这篇文章中&#xff0c;我们将介绍测试用例设计常用的几种方法&#xff0c;以及如何编写高效的测试用例。 ## 一…

Nginx配置导致请求成环的问题

前期介绍 在一台主机上部署LAMP&#xff0c;之后使用Nginx实现反向代理&#xff0c;并且实现动静分离。 apache的访问端口为80&#xff0c;Nginx&#xff0c;访问端口为8001端口。 首先可以实现反向代理。 [rootlnmp-247 ~]# cat /usr/local/nginx/conf/nginx.conf worker_…

FPGA之组合逻辑与时序逻辑

数字逻辑电路根据逻辑功能的不同&#xff0c;可以分成两大类&#xff1a;组合逻辑电路和时序逻辑电路&#xff0c;这两种电路结构是FPGA编程常用到的&#xff0c;掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念&#xff1a;任意时刻的输出仅仅取决…

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时&#xff0c;它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程&#xff0c;能管理主机系…

十四.PyEcharts基础学习

目录 1-PyEcharts介绍 优点&#xff1a; 安装: 官方文档&#xff1a; 2-PyEcharts快速入门 2.1 第一个图表绘制 2.2 链式调用 2.3 opeions配置项 2.4 渲染图片文件 2.5 使用主题 3-PyEcharts配置项 3.1 初始化配置项InitOpts InitOpts 3.2 全局配置项set_global_o…

Python爬虫逆向:揭秘网站反爬虫技术与应对策略

目录 前言 一、网站反爬虫技术概述 1. User-Agent检测 2. IP限制 3. 图像验证码 4. 动态渲染 5. 反爬虫算法 二、Python爬虫逆向的基本原理 三、应对网站反爬虫技术的代码示例 1. User-Agent检测&#xff1a; 2. IP代理&#xff1a; 3. 验证码识别&#xff1a; 4.…

如何将本地仓库放到远程仓库中

在我们仓库创建好之后&#xff0c;我们复制好ssh 接着我们需要使用git remote add<shortname><url>这个命令 shortname就是我们远程仓库的别名 接着使用git remote -v这个命令查看一下目前远程仓库的别名和地址 原本还有一个指令git branch -M main 指定分支的名…

vitess执行计划缓存 测试

打开执行计划器缓存&#xff1a; sysbench /usr/local/share/sysbench/oltp_write_only.lua --mysql-host127.0.0.1 --mysql-port15306 --mysql-userroot --mysql-password --mysql-dbcustomer --report-interval10 100s sysbench /usr/local/share/sysbench/oltp_read_only.l…

QML嵌套页面的实现学习记录

StackView是一个QML组件&#xff0c;用于管理和显示多个页面。它提供了向前和向后导航的功能&#xff0c;可以在堆栈中推入新页面&#xff0c;并在不需要时将页面弹出。 ApplicationWindow {id:rootvisible: truewidth: 340height: 480title: qsTr("Stack")// 抽屉:…

格雷希尔G10系列L150A和L200A气动快速连接器,在新能源汽车线束线缆剥线后的气密性测试密封方案

线束线缆在很多用电环境都有使用&#xff0c;比如说新能源汽车&#xff0c;从电池包放电开始&#xff0c;高低压、通讯都开始进行工作&#xff0c;线束在连接的地方需要具有较高的气密性和稳定性&#xff0c;才能保证车辆在不同环境下能够正常的运行。 线束在组装铜鼻子前需要剥…

vue+elementUI搭建动态表头的表格

前提&#xff1a;以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list&#xff0c;一个表头的list&#xff0c;一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…

基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发

一、文件系统LittleFS的介绍 LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造&#xff0c;拥有占用空间小、对硬件要求低的特点&#xff0c;同时保证在断电情况下数据的完整性和稳定性。 1.设计与特点 LittleFS的设计旨在提供嵌入式系统所…

vue基础教程(6)——构建项目级登录页

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、创建首页二、登录页代码讲解三、对应的vue知识点&#xff1a;四、附件-各文件代码总结 前言 前面我们已经把vue自带的页面删除&#xff0c;也搭建了最简单的router路由&#xff0c;下面就可以真正开发我们自己的项目…

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…

Vue限制文本框显示字数,多余用...代替

1.在filters.js封装过滤器方法 import Vue from vue//设置只显示几个字符串&#xff0c;默认20个 Vue.filter(filterAmount, function(value, n) {if(!n) n 20;if(value && value.length > n) {value value.substring(0, n) ...;}return value;} )2.在main.js引…

2024最强秋招八股文(精简、纯手打)

7/28日已更新&#xff0c;错误已修改~~~有错误的地方&#xff0c;欢迎大家留言&#xff01; 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办&#xff1f; 7.ConcurrentHa…

【C语言基础】:自定义类型(二) -->联合和枚举

文章目录 一、联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算1.5 联合体练习 二、枚举类型2.1 枚举类型的声明2.2 枚举的优点 书山有路勤为径&#xff0c;学海无涯苦作舟。 创作不易&#xff0c;宝子们&#xff01;如果这篇…

C#OpenCvSharp YOLO v3 Demo

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using S…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…