基于MyCat实现的MySQL读写分离

MyCat就相当于一个调度器,具有数据库分片功能,本身不存储数据,其功能是对后端的真实数据库的数据,进行数据划分和数据整合,方便管理。

HOW-Mycat-Read&&write separation

现在让我们通过MyCat实现数据库的读写分离

本实验中其他配置文件,参见 MySQL主从复制之Mycat简单配置和高可用  http://www.linuxidc.com/Linux/2017-04/142450.htm

如何安装mysql数据库可以参考: http://www.linuxidc.com/Linux/2016-09/135422.htm
如何构建mysql主从环境可以参考:http://www.linuxidc.com/Linux/2016-09/134820.htm

定义读,写节点

vim  schema.xml

19                 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20                            rule="sharding-by-intfile" />
43         <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="1"
44                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
45                 <heartbeat>select user()</heartbeat>
46                 <!-- can have multi write hosts -->
47                 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48                                    password="Mycat+007">
49                         <!-- can have multi read hosts -->
50 
51                 <readHost host="hostS1" url="server55.lalala.com:3306" user="mycat"
52                                    password="Mycat+007">
53                 </readHost>     <!-- can have multi read hosts -->
54                 <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
55                 </writeHost>
56         </dataHost>
                        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">


参数说明:

balance=”1″ writeType=”0″ switchType=”1″

balance

1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle .

2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1àS1,M2àS2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。

3、balance=2 所有读操作都随机的在readhost和writehost上分发

writeType

负载均衡类型,目前的取值有3种:
1、writeType=”0″, 所有写操作发送到配置的第一个writeHost。
2、writeType=”1″,所有写操作都随机的发送到配置的writeHost。
3、writeType=”2″,不执行写操作。

switchType

1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换


创建只写用户和只读用户

vim server.xml


80        <user name="mycat">
81                <property name="password">Mycat+007</property>
82                <property name="schemas">JamesMycatSchema</property>
83 
84                <!-- 表级 DML 权限设置 -->
85                <!--            
86                <privileges check="false">
87                        <schema name="TESTDB" dml="0110" >
88                                <table name="tb01" dml="0000"></table>
89                                <table name="tb02" dml="1111"></table>
90                        </schema>
91                </privileges>          
92                  -->
93        </user>
94 
95        <user name="mycat_r">
96                <property name="password">cat</property>
97                <property name="schemas">JamesMycatSchema</property>
98                <property name="readOnly">true</property>
99 
100        </user>


检测

关闭salve的sql_线程

(因为我们要做读写分离,所以数据库的同步,会对实验造成干扰)

mysql>stop slave sql_thread;在客户端登陆mycat:   

插入数据:5,mydog,10010

mysql -umycat -pMycat+007 -h172.25.88.33 -P8066

插入之后再读取,也没有看见刚刚插入的id=5

在master(server33)的mysql数据库登陆,db1数据库中查询到了刚刚插入的数据,所以写操作是在master(server33)执行的.

slave(server44)的SQL线程被关闭了,所以slave(server44)的db1也没有id=5的数据

至此读写分离圆满成功。


北京网站建设公司

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值