注意:实现MySQL读写分离的前提是我们已经将MySQL主从复制配置完毕

  

一、Mycat实现读写分离安装和配置

架构规划:

192.168.201.150     master     主节点
192.168.201.154 slave 从节点
192.168.201.156 Mycat 代理中间件

1.1、下载Mycat 官方网站:http://www.mycat.org.cn/

http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  //我这里选用的是1.6版本,下载后上传到mycat服务器

1.2、 解压mycat

[root@mysqlmycat ~]# java -version  //因为mycat是用java开发的,所以需要安装有java的环境,安装方法:https://www.cnblogs.com/patrick-yeh/p/14201966.html
[root@mysqlmycat ~]# tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //注意需要看一下自己下载的哪个版本

1.3、  把mycat文件夹移动到/usr目录下

[root@mysqlmycat ~]# mv mycat /usr

1.4、 查看解压之后的目录

[root@mysqlmycat ~]# cd /usr/mycat
[root@mysqlmycat usr]# ll

bin:存放启动和关闭mycat的文件的目录,(重点关注目录下的mycat)

catlet:存放一些小的程序,内部的应用(无需关注)

conf:存放mycat配置文件的目录(重点关注,schema.xml、server.xml)

lib:存放mycat启动依赖的第三方jar包的目录

logs:存放Mycat日志的目录

1.5、  修改mycat中conf下的配置文件schema.xml,添加以下内容:

[root@mysqlmycat mycat]# vim /usr/mycat/conf/schema.xml
        <!--定义mycat的逻辑库 dataNode代表映射的真实数据节点-->
<schema name="aa" checkSQLschema="false" sqlMaxLimit="100" dataNode="ygbookNode"></schema> <!--定义mycat的数据节点 name:必须和上面dataNode值一致 dataHost:映射真实的主机 database:映射真实的库-->
<dataNode name="ygbookNode" dataHost="ygbookHost" database="ygbook" /> <!--定义数据主机 name:名字必须和datahHost保持一致 -->
<dataHost name="ygbookHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbTypte="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<!--心跳检测-->
<heartbeat>select user()</heartbeat>
<!--写节点 host名字随便写,hostM1:master1的简称-->
<writeHost host="hostM1" url="192.168.201.150:3306" user="root" password="xxx">
<!--从节点 S1即slave1-->
<readHost host="hostS1" url="192.168.201.154:3306" user="root" password="xxx" />
</writeHost>
</dataHost>

注意:原schema.xml文件中的配置都可以删除了,只保留以上内容

 

1.6、修改登录mycat的权限文件server.xml

[root@mysqlmycat mycat]# vim /usr/mycat/conf/schema.xml
<system>
<!--这里配置的都是一些系统属性,可以自己查看mycat文档-->
<property name="defaultSqlPariser">druidparser</property>
<!--5.x版本必须是utf8-->
<property name="charset">utf8</property>
</system> <!--配置用户信息 name:代表登陆mycat用户名 password:代表登陆的密码-->
<user name="root">
<property name="password">xxx</property>
<!--用来指定可以操作的逻辑库-->
<property name="schemas">aa</property>
</user>

注意:原server.xml文件中的配置都可以删除了,只保留以上内容

1.7、 启动mycat

[root@mysqlmycat bin]# cd /usr/mycat/bin
[root@mysqlmycat bin]# ./mycat console

1.8、  查看日志

[root@mysqlmycat bin]# tail -f ../logs/mycat.log

1.9、  数据库连接配置,测试

知识拓展:

读写分离实现方式有两种:
1)配置多数据源;
2)使用mysql的proxy中间件代理工具;
第一种方式中,数据库和Application是有一定侵入性的,即我们的数据库更换时,application中的配置文件是需要手动修改的。而第二种方式中,我们可选择mysql proxy固定连接一个数据库,即使数据库地址更换也无需更换项目中的数据库连接配置。
同样,在开始配置实现MySQL读写分离之前,我们会遇到一个选型问题,那就是在诸多的MySQL的proxy中间件工具中,如mysql-proxyatlascobarmycattddltinnydbroutermysql router等,我们该如何取舍呢?所以在择工具实现前,我们先对以上的proxy中间件做一个简单的优劣介绍,以便我们根据不同的场景选择。

二.MySQL的proxy中间件工具优劣

以下主要对比MyCat和MySQL Router。

2.1 MyCat

是基于阿里巴巴的Cobar方案优化而来,支持半自动化分片,join。为什么叫"半自动化"呢?因为需要DBA对每个表的分片策略进行配置和干涉。
优点:

  • 功能较丰富,对读写分离和分库分表都有支持;
  • 易用,且对原有的应用系统侵入比较小,系统改造比较易于实现;
  • 支持故障切换;

不足:

  • 在整个系统中,MyCat作为一个单节点来路由其他数据库,在数据库比较多的情况下,MyCat本身的CPU性能压力会越来越大。因此,在生产系统中,MyCat不可避免的会需要一些高可用的手段;
  • 同样,由于MyCat本身需要解析sql,也需要合并各个数据库返回的结果,本身CPU消耗会比较高,当达到一定临界点时,CPU可能会不堪重负。

为此,在数据库较多的情况下,生产环境下的部署可能是这样的:

 

 
2.2 MySQL Router

MySQL Router是MySQL官方提供的一个轻量级中间件,可以在应用程序与MySQL服务器之间提供透明的路由方式。主要用以解决MySQL主从库集群的高可用、负载均衡、易扩展等问题。Router可以与MySQL Fabric无缝连接,允许Fabric存储和管理用于路由的高可用数据库服务器组,使管理MySQL服务器组更加简单。

MySQL Router是一个可执行文件,可以与应用程序在同一平台上运行,也可以单独部署。虽然MySQL Router是InnoDB Cluster(MySQL 7.X)的一部分,MySQL 5.6 等版本数据库仍然可以使用Router作为其中间代理层。MySQL Router的配置文件中包含有关如何执行路由的信息。它与MySQL服务器的配置文件类似,也是由多个段组成,每个段中包含相关配置选项。

MySQL Router是MySQL Proxy的替代方案,MySQL官方不建议将MySQL Proxy用于生产环境,并且已经不提供MySQL Proxy的下载。

优点:

  • 类似于nginx,位于Application与MySQL Server之间。Application不再直连MySQL Server,而是与Router相连,根据Router的配置,将会把应用程序的读、写请求转发给下游的MySQL Server;
  • 支持故障切换:当下游某个Server失效时,Router可以将其从Active列表中移除,当其online后再次加入Active列表,即提供了Failover特性;
  • 当MySQL Server集群拓扑变更时,比如增减Slaves节点,只需要修改Router配置即可,无需修改应用中的数据库连接配置;
  • 如果MySQL Servers为5.7+版本,且构建为InnoDB Cluster模式,那么Router还能基于metaCache(metaServers)机制,感知MySQL Servers的主从切换、从库增减等集群拓扑变更,而且基于变更能够实现Master自动切换、Slaves列表自动装配等。比如Master失效后,Cluster将会自动选举一个新的Master,此时Router不需要任何调整、可以自动发现此新Master进而继续为应用服务。

不足:

  • Router中间件本身不会对请求“拆包”(unpackage),所以无法在Router中间件上实现比如“SQL审计”、“隔离”、“限流”、“分库分表”等功能。但是Router提供了plugin(C语言)机制,我们可以开发自己的plugin来扩展Router的额外特性;
  • 数据存储在内存中,数据量较大时,硬件需求会提升;
  • 在非InnoDB Cluster架构模式下,如果主从库拓扑变更,需要手动修改Router配置。且Router不支持“reload”,修改配置后需要重启,这在一定程度上会影响Application的服务可用性。

 

*****

mysql数据库读写分离教程的更多相关文章

  1. MySQL数据库读写分离、读负载均衡方案选择

    MySQL数据库读写分离.读负载均衡方案选择 一.MySQL Cluster外键所关联的记录在别的分片节点中性能很差对需要进行分片的表需要修改引擎Innodb为NDB因此MySQL Cluster不适 ...

  2. 170301、使用Spring AOP实现MySQL数据库读写分离案例分析

    使用Spring AOP实现MySQL数据库读写分离案例分析 原创 2016-12-29 徐刘根 Java后端技术 一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案 ...

  3. 161220、使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...

  4. 使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...

  5. Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置

    1. Mycat简介 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...

  6. Mysql数据库读写分离配置

    环境模拟 实现读写分离 减轻数据库的负荷 主服务器  master   10.0.0.12 从服务器 slave    10.0.0.66 配置主服务器: 在10.0.0.12服务器操作   创建数据 ...

  7. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  8. (转)Mysql数据库读写分离配置

    环境模拟 实现读写分离 减轻数据库的负荷 主服务器 master 10.0.0.12从服务器 slave 10.0.0.66 ------------------------------------- ...

  9. Mysql数据库读写分离Amoeba

    1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...

随机推荐

  1. 通过Jedis操作Redis

    package com.yh; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis ...

  2. 【C#】【假条生成系统】【单位剖析】如何判断在文本框输入了几个人名?

    我们规定,人名和人名之间使用顿号隔开 那么, 1个人,就是0个顿号 2个人,就是1个顿号 3个人,就是2个顿号 -- 所以我们可以判断文本框中顿号的出现次数. 出现0次,则为1人,出1次,则为两人. ...

  3. Java中的循环结构(二)

    循环结构(二) 学习本章有道的单词: rate:速度,比率 young:年轻的,年少 schedule:时间表,调度 neggtive:消极的;否定 customer:顾客,观众 birthday:生 ...

  4. 千兆车载以太网TSN网络测试?TSN Box为您焕新

    TSN概述 在汽车领域内,近几年车内网络通讯方式的变革诉求,期望能够有更高的数据传输速率,以及保证实时性的通讯方式引入.例如对于自动驾驶而言,传统的CAN总线已经远远不能满足其对通讯的要求,而基于以太 ...

  5. <转>android 解析json数据格式

    json数据格式解析我自己分为两种:一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下:{"userbean":{"Uid": ...

  6. MySQL 面试题汇总(持续更新中)

    COUNT COUNT(*) 和 COUNT(1) 根据 MySQL 官方文档的描述: InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) opera ...

  7. 如何高效地把Spring boot学到能干活的程度

    Spring boot要学什么?要学到什么程度?以及相关的学习方法是什么?这些很难量化,但极好形容:需要学到能帮你找到一份工作的程度.   任何脱离工作脱离实际的学习,都是没有意义的.比如程序员运行通 ...

  8. Spring学习(四)在Web项目中实例化IOC容器

    1.前言 前面我们讲到Spring在普通JAVA项目中的一些使用.本文将介绍在普通的Web项目中如何实例化Spring IOC容器.按照一般的思路.如果在Web中实例化Ioc容器.这不得获取Conte ...

  9. SpringBoot简单整合分布式任务调度平台(XXL-JOB)

    官方文档:https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E8%B0%8 ...

  10. C++常用工具库(C语言文件读写,日志库,格式化字符串, 获取可执行文件所在绝对路径等)

    前言 自己常用的工具库, C++ 和C语言实现 使用cmake维护的项目 持续更新..... 提供使用范例, 详见example文件夹 windows使用的VS通过了的编译. Linux(Ubuntu ...