文档章节

用mycat做读写分离:基于 MySQL主从复制

 张欢19933
发布于 2017/05/15 14:51
字数 1377
阅读 305
收藏 0

本文基于MySQL主从复制利用mycat实现读写分离。

mycat在应用当中的作用可以看下图:

mycat可以让程序员只需要关心业务代码的编写,而不用担心后端数据库集群的负载均衡,读写分离,分库分表的数据分片逻辑的编写,只要直接连接mycat就可以了。

首先我们准备一台干净的centos机器,安装好jdk

解压mycat的安装包到/user/local/下

设置mycat的环境变量

vi /etc/profile 

使配置文件立即生效

source /etc/profile  

修改配置文件

先配置server.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");   
    - you may not use this file except in compliance with the License. - You   
    may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0   
    - - Unless required by applicable law or agreed to in writing, software -   
    distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT   
    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the   
    License for the specific language governing permissions and - limitations   
    under the License. -->  
<!DOCTYPE mycat:server SYSTEM "server.dtd">  
<mycat:server xmlns:mycat="http://org.opencloudb/">  
    <system>  
    <!-- 这里配置的都是一些系统属性,可以自己查看mycat文档 -->  
    <property name="defaultSqlParser">druidparser</property>  
    <property name="charset">utf8mb4</property>  
    </system>  
                              
    <!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群 -->  
    <user name="user1">  
        <property name="password">root</property>  
        <property name="schemas">pcx_schema</property>  
    </user>  
                              
    <!-- 用户2,只读权限-->  
    <user name="user2">  
        <property name="password">root</property>  
        <property name="schemas">pcx_schema</property>  
        <property name="readOnly">true</property>  
    </user>  
  
</mycat:server>  

这里配置了两个可以来连接的用户
用户1  user1 密码root   给予了此用户pcx_schema数据库的权限
用户2  user2 密码root   给予了此用户pcx_schema数据库的只读权限
注意这里的pcx_schema 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可

接下来配置schema.xml

<?xml version="1.0"?>  
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
<mycat:schema xmlns:mycat="http://org.opencloudb/">  
      
    <!-- 定义MyCat的逻辑库 -->  
    <schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>  
  
    <!-- 定义MyCat的数据节点 -->  
    <dataNode name="pcxNode" dataHost="dtHost" database="pcx" />  
  
      
    <!-- 定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一-->  
    <!-- dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 -->  
    <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->  
    <!-- writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost-->  
    <dataHost name="dtHost" maxCon="500" minCon="20" balance="1"  
        writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">  
        <!--心跳检测 -->  
        <heartbeat>show slave status</heartbeat>  
          
        <!--配置后台数据库的IP地址和端口号,还有账号密码 -->  
        <writeHost host="hostMaster" url="192.168.1.6:3306" user="root" password="root" />  
        <writeHost host="hostSlave" url="192.168.1.7:3306" user="root" password="root" />  
    </dataHost>  
      
  
</mycat:schema> 

一,  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
这里TESTDB 就是我们对外声称的我们有数据库的名称  必须和server.xml中的用户指定的数据库名称一致
添加一个dataNode="dn1" 是指定了我们这个库只在dn1上.没有进行分库
 
二, <dataNode name="dn1" dataHost="localhost1" database="db1" />
这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .
根据你自己的数据库名进行修改.

三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

这里只需要配置三个地方    balance="1"与writeType="0" ,switchType=”1”
a. balance 属性负载均衡类型,目前的取值有 4 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
b. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。
c. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换

四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
</writeHost>

这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码

启动mycat

cd /usr/local/mycat/bin/ 
./mycat start 

我们可以使用mysql客户端连接或者navicat来连接mycat

测试一下读写分离
测试一下读操作
我们连接到mycat发送一句select *命令试试

进入mycat的日志目录

cd /usr/local/mycat/logs/  

查看日志

可以看到select 操作被路由到了192.168.1.7也就是我们的slave节点

接下来我们测试一下写操作

可见插入被路由到了master节点

本文转载自:http://blog.csdn.net/u011325787/article/details/51423424#

粉丝 47
博文 533
码字总数 244932
作品 0
海淀
私信 提问
Mycat - 实现数据库的读写分离与高可用

mysql主从实现 Mycat不负责任何的数据同步问题,mysql的主从复制还得从mysql层面来实现;如果没有实现mysql的主从复制,后文就都成 如果想学习Java工程化、高性能及分布式、深入浅出。微服务...

编程SHA
02/20
114
0
MyCat 看了这篇什么都会了

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

木迪_2a4e
2018/09/17
0
0
MySQL高可用读写分离集群视频课程 MyCat教程

课程大纲: 第1节MySQL源码编译安装(CentOS-6.6+MySQL-5.6)38分钟 第2节MySQL主从复制的配置(CentOS-6.6+MySQL-5.6)58分钟 第3节MyCat在MySQL主从复制基础上实现读写分离-0130分钟 第4节M...

15543647553
2018/05/13
0
0
MySQL以及MyCat的使用

MySQL的安装(rpm格式/需要联网) 安装环境 VMware Linux CentOS-6.5。 上传工具FileZilla Client 第一步:查看mysql是否安装。 第二步:如果mysql的版本不是想要的版本。需要把mysql卸载。 ...

Cehae_Dong
2018/07/01
0
0
JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个...

kent鹏
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部