MySQL主从复制与读写分离

MySQL主从复制和读写分离 前言在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。 MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。主MySQL服 阅读详情

一、MySQL 读写分离与主从复制

1、读写分离基本的原理

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

2、为什么要做读写分离

因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。
但是数据库的“读”(读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率

3、什么时候要读写分离

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

4、主从复制的原理

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

5、mysql 支持的复制类型

(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

6、主从复制的工作过程

(1)在每个事务更新数据完成之前,Master 在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master 通知存储引擎提交事务。
(2)Slave 将 Master 的复制到其中继日志(Relay log)。首先slave 开始一个工作线程(I/O),I/O线程在 Master 上打开一个普通的连接,然后开始 Binlog dump process。Binlog dump process 从 Master 的二进制日志中读取事件,如果已经跟上 Master,它会睡眠并等待 Master 产生新的事件,I/O线程将这些事件写入中继日志。
(3)SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新 Slave 数据,使其与 Master 中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
复制过程有一个很重要的限制,即复制在 Slave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。

7、MySQL 读写分离原理

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

8、常见的 MySQL 读写分离分为以下两种:

1)、基于程序代码内部实现
在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。
优点是性能较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。
但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动就较大。

2)、基于中间代理层实现
代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。
(1)MySQL-Proxy。MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行SQL 判断。
(2)Atlas。是由奇虎360的Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事物以及存储过程。
(3)Amoeba。由陈思儒开发,作者曾就职于阿里巴巴。该程序由Java语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。

由于使用MySQL Proxy 需要写大量的Lua脚本,这些Lua并不是现成的,而是需要自己去写。这对于并不熟悉MySQL Proxy 内置变量和MySQL Protocol 的人来说是非常困难的。
Amoeba是一个非常容易使用、可移植性非常强的软件。因此它在生产环境中被广泛应用于数据库的代理层。

9、amoeba配置文件

主配置文件: $AMOEBA_HOME/conf/amoeba.xml,用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。

数据库服务配置文件: $AMOEBA_HOME/conf/dbServers.xml,用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。

切分规则配置文件: $AMOEBA_HOME/conf/rule.xml,用来配置切分规则。

数据库函数配置文件: $AMOEBA_HOME/conf/functionMap.xml,用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。

切分规则函数配置文件: $AMOEBA_HOME/conf/ruleFunctionMap.xml,用来配置切分规则中使用的用户自定义函数的处理方法。

访问规则配置文件: $AMOEBA_HOME/conf/access_list.conf,用来授权或禁止某些服务器IP访问Amoeba。

日志规格配置文件: $AMOEBA_HOME/conf/log4j.xml,用来配置Amoeba输出日志的级别和方式。

二、MySQL 读写分离与主从复制步骤

在这里插入图片描述

环境搭建:
master服务器:192.168.220.3				软件:mysql5.7
slave1服务器:192.168.220.4				软件:mysql5.7
slave2服务器:192.168.220.5				软件:mysql5.7
amoeba服务器:192.168.220.6				软件:jdk1.6、Amoeba
客户端	   :192.168.220.7				软件:mysql5.7
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

-----------搭建 MySQL 主从复制------------
----Mysql主从服务器时间同步----
##主服务器设置##
yum install ntp -y

vim /etc/ntp.conf
--末尾添加--
server 127.127.220.0							#设置本地是时钟源,注意修改网段
fudge 127.127.220.0 stratum 8					#设置时间层级为8(限制在15内)

service ntpd start

##所有从服务器设置##
yum install ntp ntpdate -y

service ntpd start
/usr/sbin/ntpdate 192.168.220.3				#进行时间同步,指向Master服务器IP

crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.220.3


##主服务器的mysql配置##
vim /etc/my.cnf
server-id = 11
log-bin=master-bin							#添加,主服务器开启二进制日志
log-slave-updates=true						#添加,允许从服务器更新二进制日志

systemctl restart mysqld

mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.220.%' IDENTIFIED BY '123456';			#给从服务器授权
FLUSH PRIVILEGES;

show master status;
//如下显示
mysql> mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      604 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#File 列显示日志名,Fosition 列显示偏移量


##从服务器的mysql配置##
vim /etc/my.cnf
server-id = 22								#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin						#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index		#添加,定义中继日志文件的位置和名称

systemctl restart mysqld

mysql -u root -p
CHANGE master to master_host='192.168.220.3',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;					#配置同步,注意 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、防火墙没有关闭


----验证主从复制效果----
主服务器上进入执行 create database db_test;

去从服务器上查看 show databases;
搭建云平台 1 Day 虚拟机安装(超详细) 点击OFF 那个按钮看看网络的地址和速度有没有显示,如果有 则到目前为止都是成功的。Host name随便起一个名字就行了**-_-**文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**,如果我们安装的VMware14就会默认为。因为我的是VMware16,所以默认。也是可以的,但是千万不要用。 阅读详情

相关推荐

VS2019配置Qt5.14.2开发环境全流程(含MSVC2017 64-bit选择指南)

本文详细介绍了在VS2019中配置Qt5.14.2开发环境的完整流程,特别针对MSVC2017 64-bit编译器的选择提供了专业建议。从环境准备、Qt安装配置到VS2019集成设置,逐步指导开发者完成开发环境的搭建,并提供了常见问题的解决方案和高级优化技巧,帮助开发者高效进行Qt开发。

weixin_29243279的博客 513

企业中最常用的——MySQL主从复制与读写分离

文章目录MySQL主从复制与读写分离一、案例概述二、MySQL主从复制与读写分离理论1、什么是读写分离2、为什么要读写分离3、什么时候要读写分离4、主从复制与读写分离5、mysql 支持的复制类型6、主从复制的工作过程7、MySQL读写分离原理8、常见的 MySQL 读写分离分为两种三、MySQL主从复制与读写分离实验部署(一)、搭建MySQL主从复制1、MySQL主从服务器时间同步2、主服务器的MySQL配置3、从服务器的MySQL配置 MySQL主从复制与读写分离 一、案例概述 在实际的生产环境中,如果

panrenjun的博客 1447

STM32裸机开发基础:寄存器直接操作详解

寄存器是微控制器内部的特殊存储单元,直接与硬件电路连接,用于控制和监视硬件功能。与普通内存不同,寄存器的每一位(bit)通常都有特定的硬件含义。寄存器就是机器的控制面板上的各种开关和指示灯每个开关控制一个具体功能(如打开LED、启动通信)每个指示灯显示一个具体状态(如数据接收完成、错误发生)// GPIO引脚定义1。

2401_88760782的博客 2187

MySQL主从复制及读写分离

MySQL主从复制及读写分离

m0_67062351的博客 291

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

一文说清Arduino如何实现舵机平滑转动(机器人场景)

深入讲解如何利用arduino控制舵机转动,实现机器人场景中的平稳运动。通过代码优化与脉冲宽度调节,让舵机动作更精准流畅,适用于各类自动化项目。

weixin_35706255的博客 899

【MySQL】数据库——主从复制和读写分离

读写分离,主数据库处理事务性增、改、删操作从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

2401_83330816的博客 3597

从零到一:基于K375S主控的机械键盘优联无线化改造实战

本文详细记录了基于罗技K375S主控进行机械键盘优联无线化改造的全过程。从改造动机、核心原理与物料准备,到电路设计、PCB打样、焊接调试,逐步拆解了将优联技术集成到自定义机械键盘中的实战步骤。项目最终实现了低延迟、高稳定性且支持多设备连接的优联无线机械键盘,为DIY爱好者提供了高性价比的改造方案。

h0i1j2k3l的博客 601

Mysql 主从复制、读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离。

2201_75549363的博客 1445

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 210

rk3576 适配摄像头 (mipi 双摄)

RK3576 自带两个 4-Lane DPHY 和一个 DCPHY CSI 接口,可以连接 4lane 的双摄像头,最直接的方式就是充分利用其两个 D-PHY 接口。次选方案是 DCPHY + DPHY方案,更次之方案是单DPHY,设置成分离模式,连接两颗摄像头。

weixin_35723192的博客 389

MySQL的主从复制和读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

weixin_58376680的博客 2178

RedCap:一种通信技术的概述

总结起来,RedCap是一种基于数据包交换的通信技术,它提供了一种高效、可靠的数据传输机制。通过使用RedCap,我们可以轻松地发送和接收数据包,并确保数据的完整性和正确性。在上面的示例中,我们首先导入了RedCap库,并创建了一个RedCap实例。然后,我们定义了目标地址和源地址,并创建了一个数据包,其中包含了目标地址、源地址和要发送的数据。本文将介绍RedCap的基本原理和使用方法,并提供一些相关的源代码示例。RedCap还提供了其他一些功能,如数据包的重传机制、流量控制和拥塞控制等。

YgjWeb的博客 900

MySQL主从复制与读写分离( 主从复制原理 、读写分离原理 、配置 MySQL 主从复制 、配置 MySQL 读写分离)

文章目录

kimowinter的博客 5540

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL主从复制与读写分离(图文详解)

文章目录MySQL主从复制与读写分离一、案例概述二、======MySQL 主从复制原理======1、MySQL 支持的复制类型2、MySQL主从复制的工作过程三、======MySQL读写分离原理======1、读写分离存在意义2、常见的 MySQL 读写分离分为两种四、MySQL主从复制和读写分离实验部署案例拓扑图实验思路环境配置 MySQL主从复制与读写分离 一、案例概述 在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满

愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒! 1854

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySQL 主从复制与读写分离

MySQL 主从复制是一种数据同步机制,允许数据从一个主数据库(Master)复制到一个或多个从数据库(Slave)。数据冗余与灾备:通过从库提供数据备份,增强容灾能力。负载均衡:将读操作分散到多个从库,减轻主库压力。高可用性:主库故障时,从库可快速切换为主库,减少停机时间。MySQL 读写分离是一种通过分离读操作(SELECT)与写操作(INSERT/UPDATE/DELETE)的数据库架构设计,将写操作集中在主库(Master),读操作分散到从库(Slave),以提升系统性能和并发处理能力。核心作用。

2301_80839375的博客 1763

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MYSQL主从复制与读写分离

只在主服务器上写,只在从服务器上读主数据库处理事务性查询,从数据库处理select查询数据库复制用于将事务性查询的变更同步到集群中的从数据库读写分离方案基于程序代码内部实现基于中间代理层实现Amoeba。

sea_bunch的博客 906
上一篇: MySQL备份、恢复与日志管理
下一篇: Nginx+Tomcat 实现负载均衡、动静分离
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值