MySQL读写分离方案之 MySQL 一主多从

【Java】 Java MySQL 实现读写分离方案 - 配置连接池 -->-- 数据库驱动 -->-- 相应驱动的jdbcUrl -->-- 数据库的用户名 -->-- 数据库的密码 -->-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->-- 每个分区最大的连接数 -->-- 每个分区最小的连接数 --></bean>-- 配置连接池 -->-- 数据库驱动 --> 阅读详情

MySQL 一主多从实现读写分离

本节主要基于Docker 实现mysql主从复制达到读写分离的效果

主从架构原理

第一步就是master记录二进制日志(这些记录叫做二进制日志事件,binary log events)。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

第二步就是slave将master的binary log拷贝到它自己的中继日志(relay log)。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

第三步SQL slave thread处理该过程的最后一步,slave重复中继日志中的事件,将改变执行到自己的数据库。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。

环境配置

在主节点和从节点都做如下配置

1. 创建目录

mkdir -p /usr/local/docker/mysql
cd /usr/local/docker/mysql

mkdir conf data

2. 配置docker-compose 环境

  • 下载docker-compose 二进制文件,并配置docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

3. yaml 文件

在 /usr/local/docker/mysql 目录下,创建docker-compose.yml文件

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/mysql.conf.d

配置Mysql 主从模式

1. 主节点

  • 编写 mysqld.cnf 文件

配置 /usr/local/docker/mysql/conf/mysqld.cnf 文件

#  mysqld.cnf 文件内容如下
[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql

symbolic-links=0

server-id = 1
log-bin = mysql-bin

  • 启动mysql
cd /usr/local/docker/mysql

docker-compose up -d
  • 查看master 节点状态

[外链图片转存失败(img-G2jY6pG6-1569051350666)(C:\Users\jiangkuan\Desktop\容器技术\mysql集群搭建\asserts\20190911212823.png)]

  • 记住2个参数 File,Position的值一般都是以下2个值,不是的在Master节点上 reset master

    • File: mysql-bin.000001

    • Positon: 154

2. 从节点

  • 编写 mysqld.cnf 文件

配置 /usr/local/docker/mysql/conf/mysqld.cnf 文件

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql

symbolic-links=0

server-id=2
  • 启动mysql
cd /usr/local/docker/mysql

docker-compose up -d
  • 关闭slave服务(若没有开启,这步跳过)
stop slave
  • 动态设置主节点信息
# 主节点ip 主节点MySQLServer的用户名密码  二级制文件名称和位置
change master to master_host='192.168.141.55',master_user='root',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=888;

[外链图片转存失败(img-VCbLLFlB-1569051350668)(C:\Users\jiangkuan\Desktop\容器技术\mysql集群搭建\asserts\20190911214255.png)]

  • 开启Slave 服务
start slave

至此基于Docker的MySQL的读写分离,到此搭建完毕。

搭建过程中遇到的问题

  • Slave_IO_Running、Slave_SQL_Running不全为YES 情况
mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

如果是slave_io_running no了,那么就我个人看有三种情况,一个是网络有问题,连接不上,像有一次我用虚拟机搭建replication,使用了nat的网络结构,就是死都连不上,第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。
一旦io为no了先看err日志,看看爆什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。 

如果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,今天我想重现,但是有时候会有问题,有时候就没有问题,现在还不是太明了,后面再更新,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。 

# 问题复现
这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是: 
This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement. 
This statement is valid only when the slave thread is not running. Otherwise, it produces an error.

错误实例:
show slave status\G 
Slave_IO_Running: Yes 
Slave_SQL_Running: No 

有问题了,Slave_SQL_Running应该是Yes才对。 

再往下看,有错误的提示: 

 Last_Errno: 1062
 Last_Error: Error 'Duplicate entry 'b847a74ad1e35badd71d0171bd703360' for key 'PRIMARY'' on query. Default database: 'fangh6fu'. Query: 'INSERT INTO `fangh6fu`.`ecs_sessions` (sesskey, expiry, ip, data) VALUES ('b847a74ad1e35badd71d0171bd703360', '1447919111', '192.168.1.214', 'a:0:{}')'
 
# 解决方案:
先stop slave,然后执行了一下提示的语句,就是把重复的主键记录删除,
再SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
最后 START SLAVE; 

# 查看Slave 状态
show slave status\G 

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

OK了,从服务器也在几分钟内把堆积的log处理完了,两边又同步了:

mysql一主多从以及使用springboot aop进行读写分离的搭建的正确姿式 介绍 这是一篇高度集中火力的生产环境中的mysql5.7一主多从以及结合spring boot进行读写分离的最全文档。主末笔者还会给出一个完整的基于spring boot的使用aop特性做完整项目读写分离的全代码与演示。 本文涉及技术点如下: mysql5.7.30+版本 spring boot AOP haproxy keep alive 1.目标 mySQL层1主挂多从 安装3台mysql服务器,三台服务分布如下: mySQL master: 192.168.2.101 mySQ.. 阅读详情

相关推荐

MySQL双主多从读写分离自动化安装

采用MySQL Replication+ MySQL Proxy+Heartbeat实现MySQL读写分离HA 双Master都安装MySQL Proxy和Heartbeat(也可以单独安装MySQL Proxy,Heartbeat跟MySQL Proxy装在一起),多个Slave跟每个Master进行多主单从模式的数据同步,Application通过Heartbeat浮动IP访问数据库。

mysql-主从、读写分离

读写分离

songtaiwu的博客 672

用blender为模型贴图并在gazebo中显示

用blender为模型贴图并在gazebo中显示 首先我用的是最新的blender2.92版本,附上链接https://www.blender.org/download/。并设置好简体中文。语言可以在编辑->偏好设置->界面里面设置。 首先界面右上角的摄像头,方块,灯光三个场景全都删除。 接着导入stl格式的模型文件,下面以tianbot_mini上面的激光雷达的模型为例。 导入激光雷达模型后,点击进入上方的UV Editing按钮进入UV编辑界面 此时我面看见网格化的激光雷达模型

qq_48427527的博客 8001

mysql 一主多从、读写分离

在master和slave、slave1上创建amoeba能够访问Mariadb的用户。将JDK1.6安装包解压 ./jdk-6u14-linux-x64.bin。配置写入amoeba访问后台Mariadb数据库的用户名与密码。mysql数据库读写分离基于mysql主从复制的基础上。在master主服务器上创建库和表,插入数据。先配置好mysql的主从复制再配置读写分离。在master主服务器上创建用户并授权。在master主服务器插入 test2。五、在主从服务器上创建授权用户。

xuyang980926的博客 300

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

Ferromagnetic soft continuum robots

本文来自机器人领域顶刊,Science Robotics。介绍了一种铁磁软连续体机器人,主要贡献为1)介绍了一个基于磁性微粒和聚合物的软连续体机器人的制造方法,在机器人外表面涂了一层水凝胶,极大地降低了摩擦阻力;2)并研究了在磁场下,不同粒子体积分数下,此机器人的驱动性能;利用手动操控的磁铁,进行了许多实验证明该机器人性能的优异性。 铁磁软连续体机器人 Ferromagnetic soft continuum robots [1] Paper Link Authors: Kim, Yoonho, et al

XU Yangxin的博客 1374

Mysql一主多从和读写分离配置简记

近期开发的系统中使用MySql作为数据库,由于数据涉及到Money,所以不得不慎重。同时,用户对最大访问量也提出了要求。为了避免Mysql成为性能瓶颈并具备很好的容错能力,特此实现主从热备和读写分离。在此简做纪要,以备日后所用! 一、配置主从 条件:两台PC,IP分别为192.168.168.253,192.168.168.251。两台PC上的Mysql版本为5.0。253上的Mysql为Ma...

dowhathowtodo 619

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南

本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。

weixin_29190573的博客 326

MySQL主从复制与读写分离

MySQL主从复制与读写分离

m0_71593537的博客 754

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

YOLO26科研优化:多损失函数(EIoU、SIoU等)融合,让边界框回归精度再上台阶

将原有损失函数替换为我们编写的MultiLoss。例如,在bbox_loss。

LXY_LOVE36的博客 172

MySQL主从复制和读写分离

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

刻苦的樊同学 758

深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践

在异构计算领域,Zynq-7000系列SoC的AMP(Asymmetric Multiprocessing)模式堪称多核编程的瑞士军刀。独立运行环境:CPU0运行Linux,CPU1运行FreeRTOS或裸机程序硬件资源独占:CPU0管理DDR,CPU1使用OCM(片上内存)中断隔离:默认所有中断路由到CPU0这种架构非常适合需要实时响应的工业控制系统——比如用CPU0处理网络通信,CPU1负责电机控制。AMP模式下中断路由的底层原理多维度性能优化技巧工业级可靠性的实现方案。

QQ_778132974的博客 492

Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从

Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从

p15097962069的博客 82

基于STM32LXXX的模数转换芯片ADC(CMS24AD2001)驱动C程序设计

/ 电压 = (原始值 / 2^23) * Vref (注意:24位有符号数范围为 -2^23 到 2^23-1)//---------------- 硬件端口映射 (请根据实际电路修改) ----------------ADC_SCLK_HIGH();- PGA 放大倍数可选:1、2、4、8、16、32、64、128、256;//---------------- 宏定义操作 -------------------//---------------- 函数声明 -------------------

myron6688的博客 161

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/WriteSplitting),基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 1、设置说明 Master服务器:...

weixin_33859665的博客 257

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

mycat mysql 一主多从_Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从...

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!本文主要为了记录MySQL搭建读写分离的操作,是本人的操作纪实,并没有详细讲解其中的原理和操作设置,如果需要详细解释的,不建议阅读。环境准备:linux系统版本对应服务器地址数据库版本CentOS7192.1...

weixin_39811166的博客 507

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql主备模型一写多读,mysql读写分离(双写多读高可用)的尝试方案

一、设计目标写入库双活:主从热备模式,程序只向一个写入库写入数据,主库W1死了后备库W2顶上,确保业务正常可用,运维修复W1之后重新加入集群,当后备库。读写分离:由于项目业务逻辑复杂,需求调研混乱,程序毫无设计导致SQL性能奇差,为了防止select把cpu拉到100%导致写入失败,必须读写分离,目前设计为3台用于搜索的读取库(R1、R2、R3),采用简单轮询的负载均衡机制。二、设计思路1、写入库...

weixin_39763683的博客 467

mysql多写架构_Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从...

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!本文主要为了记录MySQL搭建读写分离的操作,是本人的操作纪实,并没有详细讲解其中的原理和操作设置,如果需要详细解释的,不建议阅读。环境准备:linux系统版本对应服务器地址数据库版本CentOS7192.1...

weixin_30665313的博客 296

mysql 读写分离

目录 读写分离简介 what 什么是读写分离? why 为什么要读写分离呢? when 什么时候要读写分离? 主从复制与读写分离 mysql读写分离 mysq支持的复制类型 复制的工作过程 mysql读写分离原理 常见的Mysql读写分离 基于程序代码内部实现 基于中间代理层实现 读写分离简介 what 什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增...

今天吃了吗的博客 509

MySQL 主备切换以及读写分离

主库、备库:建议你把节点 B(也就是备库)设置成只读(readonly)模式。这样做,有以下几个考虑:有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作;防止切换逻辑有 bug,比如切换过程中出现双写,造成主备不一致;可以用 readonly 状态,来判断节点的角色。因为 readonly 设置对超级 (super) 权限用户是无效的,而用于同步更新的线程,就拥有超级权限。

一个喜欢诗和远方的程序媛 3554

【MySQL】MySQL复制架构

一主多从复制架构 在实际应用场景中,MySQL复制90%以上都是一个Master复制到一个或者多个Slave的架构模式。 在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量的对实时性要求不是特别高的读请求通过负载均衡分部到多个从库上(对于实时性要求很高的读请求可以让从主库去读),降低主库的读取压力,如下图所示。 缺点: master不能停机,停机就不能接收写请求 slave过多会出现延迟 由于master需要进行常规维护停机了,那么必须要把一个slave提成master

morris 3万+

mysql 多主多从

目录: 1. MySQL复制原理 2. mysql一主多从 3. mysql 双主 4. mysql 读写分离 5. mysql + keepalived高可用 6. mysql 监控 7. mysql 参数详解 8. mysql 监控 9. mysql replication 常见错误及处理方法 实验环境说明 10.0.0.25 nameserver.baby.

Joker 的博客 1378

MySQL架构优化

本章列举了MySQL数据库的各种优化的实现方法

LGRong1998的博客 340
上一篇: 微服务解决方案之再聊微服务
下一篇: MySQL读写分离之MySQL 双主双从
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值