MySQL读写分离的三种实现方案
MySQL读写分离的三种实现方案
文章目录
- MySQL读写分离的三种实现方案
- 一、搭建一个“一主两从”的MySQL集群
- 二、读写分离实现:方案一
- 2.1 配置多个数据源
- 2.2 使用AbstractRoutingDataSource
- 2.3 这个版本的缺点:
- 三、读写分离实现:方案二
- 3.1 通过ShardingSphere-jdbc 实现读写分离
- 3.2 这个版本的缺点:
- 四、读写分离实现:方案三
- 4.1 通过ShardingSphere-Proxy 实现读写分离
一、搭建一个“一主两从”的MySQL集群
先搭建一个mysql集群(一主两从),半同步复制:mysql 半同步复制,三个节点。
二、读写分离实现:方案一
2.1 配置多个数据源
(1)、基于 Spring/Spring Boot,配置多个数据源(例如2个,master 和 slave)
(2)、根据具体的 Service 方法是否会操作数据,注入不同的数据源,1.0版本
通过配置多个数据源,在service层实现读写分离。
2.2 使用AbstractRoutingDataSource
(3)、改进一下1.1:基于操作 AbstractRoutingDataSource 和自定义注解 readOnly 之 类的,简化自动切换数据源
(4)、改进二下1.2:支持配置多个从库;
使用AbstractRoutingDataSource和自定义注解。
(5)、改进三下1.3:支持多个从库的负载均衡
思路:在myreadwritesep-abstract-rounting-v1基础之上,多一个read类型的数据源,然后判断注解的name为read时候,在read01和read02 中随机选择。
-- 创建用户, 在主节点上执行
create schema performance;
CREATE USER 'performance'@'%' IDENTIFIED BY 'performance^pw';
GRANT ALL ON performance.* TO 'performance'@'%';
flush privileges;-- 在主节点上执行
create table performance.t_model_info(m_id int(11) not null primary key auto_increment comment '主键,自增',model_type varchar(128) not null unique comment '模块类型',model_name varchar(128) not null unique comment '模块名称',model_status tinyint(1) not null default 0 comment '0 启用, 1 不启用'
)Engine=InnoDB AUTO_INCREMENT=1 default CHARSET=utf8mb4;
2.3 这个版本的缺点:
- 侵入性强;
- “写完读”不一致问题,server方法,先向主库insert语句,然后立刻select,却查不出数据;
三、读写分离实现:方案二
3.1 通过ShardingSphere-jdbc 实现读写分离
改进v1.0,ShardingSphere-jdbc 的 Master-Slave 功能
1)SQL 解析和事务管理,自动实现读写分离
- 第一,将事务都管理起来;
- 第二,做SQL解析,自动实现读写分离;
2)解决”写完读”不一致的问题
- 如果在一个事务中,先写后读,该框架有个优化;在一个事务里,前几个都是毒,正常读就行,只要碰到一个写,后面不管有多少条读,都走主库。这样就完美解决了“写完读”不一致的问题。
通过Shardingsphere-jdbc框架实现读写分离。
3.2 这个版本的缺点:
- 对业务还是有侵入性(这一套东西,需要配置到业务代码中);
- 对已存在的旧系统改造不友好;
四、读写分离实现:方案三
4.1 通过ShardingSphere-Proxy 实现读写分离
改进v2.0, MyCat/ShardingSphere-Proxy 的 Master-Slave 功能
1)需要部署一个中间件,规则配置在中间件
2)模拟一个 MySQL 服务器,对业务系统无侵入
shardingsphere-proxy实现读写分离。
MySQL读写分离的三种实现方案相关推荐
- lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- mysql读写分离实现_脱离开发:Mysql读写分离方案之一
案例:Mysql读写分离 技能目标: · 熟悉MySQL主从复制原理 · 熟悉MySQL读写分离原理 · 学会配置MySQL主从复制 · 学会配置MySQL读写分离 6.1 案例分析 6.1.1 案例 ...
- mysql读写分离中间件有哪些
mysql中间件有哪些 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开 ...
- 正确修改MySQL最大连接数的三种好用方案
以下的文章主要介绍的是正确修改MySQL最大连接数的三种好用方案,我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远 ...
- mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离
前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...
- mysql读写分离的完整配置
参考文章: 文章一[仅供参考]: 构建高性能web之路------mysql读写分离实战[按照里面配置主从mysql同步失败,并且按照他的my.cnf配置,给我的虚拟机搞坏了,重新弄了一个] http ...
- 【MySQL】Gaea 数据库中间件实现 MySQL 读写分离
声明: 以下内容是学习macro作者的文章,作者原创文章链接:你还在代码里做读写分离么,试试这个中间件吧! 下面夹杂了我自己运行过程中的错误与心得,能运行成功 传统的MySql读写分离方案是通过在代码 ...
- Mysql 读写分离中间件(Gaea)
01 摘要 传统的MySql读写分离方案是通过在代码中根据SQL语句的类型动态切换数据源来实现的,那么有没有什么中间件可以自动实现读写分离呢?小米开源的数据库中间件Gaea就可以实现,接下来我们将详细 ...
- SpringBoot + MyBatis + MySQL 读写分离实战
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AiKuJEB9 1. 引言 读写分 ...
- mysql读写分离,主从配置
2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...
最新文章
- nodejs之connect
- 最为一个领导,我该怎么领导
- Some Essential JavaScript Questions And Answers(6)
- 再次搬家到自建博客http://www.wikieee.com/blog/leiad/homepage
- 从Linux终端管理进程:10个你必须知道的命令
- IE10兼容性故障的解决办法
- winxp系统的驱动可用于win2k吗?_收藏!工业机器人伺服系统常见问题汇总
- 新浪微博 android2.3,BlackLight新浪微博客户端
- QT中使用ActiveX
- 概念模型向逻辑模型的转换
- 计算机网络什么属于广域网,以什么将网络划分为广域网和局域网
- php xml 修改节点值,.NET_XML文件修改节点属性值(多种方法),xml 文件内容: 复制代码 代码如 - phpStudy...
- 对华为鸿蒙开源的看法,开源鸿蒙已经不属于华为,鸿蒙发展有哪些意义?
- autojs人像变换
- 解决Windows10电脑时间不同步或无法更新问题
- MatLab归一化说明
- android盒子应用程序未安装,Android应用程序未安装怎么办 APK应用未安装解决办法...
- 达人评测 锐龙r7 5800x3D相当于i几 r75800x3d参数
- 创建简单的CA并签名
- Android 的Toast(吐丝框)