专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Mycat使用MySQL进行读写分离

Mycat使用MySQL进行读写分离

更新时间:2021-06-15 16:29:10 来源:动力节点 浏览1272次

MyCat作为数据库的中间件,对于上层应用来说,他就是一个数据库。因此需要配置数据库的用户名,密码,数据库名,以及读写权限。

下面是MyCat的默认配置(部分):

mycat读写分离

server.xml

user节点配置用户信息,详细说明如下:

user用户配置节点

--name登录的用户名,也就是连接Mycat的用户名

--password登录的密码,也就是连接Mycat的密码

--schemas数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs

我这里修改如下(只需要改动user节点信息即可):

<user name="root">
  <property name="password">123456</property>
  <property name="schemas">db_test</property>
</user>

在schema.xml文件中配置读写分离

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 <!-- 数据库配置,与server.xml中的数据库对应 -->
 <schema name="db_test" checkSQLschema="false" sqlMaxLimit="100" dataNode="db_node"></schema>
 <!-- 分片配置 -->
 <dataNode name="db_node" dataHost="db_host" database="db_test" />
 <!-- 物理数据库配置 -->
 <dataHost name="db_host" maxCon="1000" minCon="10" balance="3"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <!-- can have multi write hosts -->
 <writeHost host="hostM1" url="mysql_master:3306" user="root"
 password="apple">
 <!-- can have multi read hosts -->
 <readHost host="hostS2" url="mysql_slaver:3306" user="root" password="apple" />
 </writeHost>
 </dataHost>
</mycat:schema>

这里有几个配置需要说明下:

sqlMaxLimit配置默认查询数量

database为真实数据库名

balance="0",不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-&gt;S1,M2-&gt;S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

balance="2",所有读操作都随机的在writeHost、readhost上分发。

balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。

writeType="0",所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.

writeType="1",所有写操作都随机的发送到配置的writeHost。

writeType="2",没实现。

-1表示不自动切换

1默认值,自动切换

2基于MySQL主从同步的状态决定是否切换

启动mycat

在mycat所在的服务器启动

./mycat start
mysql -uroot -p123456 -P8066 -h127.0.0.1
#stop
./mycat stop

连上之后跟普通的MySQL一模一样

使用Navicat连接mycat

在外网(相对虚拟机而言)访问mycat,需要配置ip白名单。

配置文件在server.xml中

<!-- 全局SQL防火墙设置 -->
<firewall>
 <whitehost>
 <host host="192.168.74.1" user="root"/>
 <host host="127.0.0.1" user="root"/>
 </whitehost>
 <blacklist check="false">
 </blacklist>
l</firewall>

这里192.168.74.1为我本机相对虚拟机的ip地址,这里要说明下,如果配置了ip白名单,则127.0.0.1也是要加上才能本地访问的,不然会被拒绝掉。

mycat读写分离

示例

这里的common是我本地在host文件里设置了映射到mycat所在虚拟机的ip。

这里可以通过在mycat中插入数据检测是否主从复制配置成功,通过修改从数据库的数据来验证是否读写进行分离。

mycat读写分离

结果

可以看到,mycat读取的是从库的数据 。这说明了,mycat读写分离功能已经实现了。

以上就是动力节点Java培训机构的小编针对“Mycat使用MySQL进行读写分离”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>