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读写分离的三种实现方案相关推荐

  1. lvs加MySQL读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

  2. mysql读写分离实现_脱离开发:Mysql读写分离方案之一

    案例:Mysql读写分离 技能目标: · 熟悉MySQL主从复制原理 · 熟悉MySQL读写分离原理 · 学会配置MySQL主从复制 · 学会配置MySQL读写分离 6.1 案例分析 6.1.1 案例 ...

  3. mysql读写分离中间件有哪些

    mysql中间件有哪些 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开 ...

  4. 正确修改MySQL最大连接数的三种好用方案

    以下的文章主要介绍的是正确修改MySQL最大连接数的三种好用方案,我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远 ...

  5. mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离

    前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...

  6. mysql读写分离的完整配置

    参考文章: 文章一[仅供参考]: 构建高性能web之路------mysql读写分离实战[按照里面配置主从mysql同步失败,并且按照他的my.cnf配置,给我的虚拟机搞坏了,重新弄了一个] http ...

  7. 【MySQL】Gaea 数据库中间件实现 MySQL 读写分离

    声明: 以下内容是学习macro作者的文章,作者原创文章链接:你还在代码里做读写分离么,试试这个中间件吧! 下面夹杂了我自己运行过程中的错误与心得,能运行成功 传统的MySql读写分离方案是通过在代码 ...

  8. Mysql 读写分离中间件(Gaea)

    01 摘要 传统的MySql读写分离方案是通过在代码中根据SQL语句的类型动态切换数据源来实现的,那么有没有什么中间件可以自动实现读写分离呢?小米开源的数据库中间件Gaea就可以实现,接下来我们将详细 ...

  9. SpringBoot + MyBatis + MySQL 读写分离实战

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AiKuJEB9 1. 引言 读写分 ...

  10. mysql读写分离,主从配置

    2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...

最新文章

  1. nodejs之connect
  2. 最为一个领导,我该怎么领导
  3. Some Essential JavaScript Questions And Answers(6)
  4. 再次搬家到自建博客http://www.wikieee.com/blog/leiad/homepage
  5. 从Linux终端管理进程:10个你必须知道的命令
  6. IE10兼容性故障的解决办法
  7. winxp系统的驱动可用于win2k吗?_收藏!工业机器人伺服系统常见问题汇总
  8. 新浪微博 android2.3,BlackLight新浪微博客户端
  9. QT中使用ActiveX
  10. 概念模型向逻辑模型的转换
  11. 计算机网络什么属于广域网,以什么将网络划分为广域网和局域网
  12. php xml 修改节点值,.NET_XML文件修改节点属性值(多种方法),xml 文件内容: 复制代码 代码如 - phpStudy...
  13. 对华为鸿蒙开源的看法,开源鸿蒙已经不属于华为,鸿蒙发展有哪些意义?
  14. autojs人像变换
  15. 解决Windows10电脑时间不同步或无法更新问题
  16. MatLab归一化说明
  17. android盒子应用程序未安装,Android应用程序未安装怎么办 APK应用未安装解决办法...
  18. 达人评测 锐龙r7 5800x3D相当于i几 r75800x3d参数
  19. 创建简单的CA并签名
  20. Android 的Toast(吐丝框)

热门文章

  1. z8350mini盒子装fedora无线wifi命令研究
  2. python暴力破解rar压缩文件
  3. 成功杀掉病毒kpvtctr和hkvaciq
  4. 中职生计算机求职信350,护士求职信350字
  5. 微信小程序云开发如何修改后台手动添加的数据
  6. 用c语言编写游戏中秋博饼,描写中秋节博饼的作文600字
  7. shell 脚本实战 四
  8. 惠普的软件定义IT和芯片级安全
  9. 大学生计算机考证时间表
  10. nx零件库插件_支持Fusion 360软件的3DSource零件库插件发布