配置MyCat读写分类前须要先配置MySQL的主从复制,参考我上一篇的文章,已经作了比较详细地讲解了。node
centos七、MySQL5.七、mycat1.6mysql
MyCat做为数据库的中间件,对于上层应用来讲,他就是一个数据库。所以须要配置数据库的用户名,密码,数据库名,以及读写权限。sql
下面是MyCat的默认配置(部分):数据库
server.xmlcentos
user节点配置用户信息,详细说明以下:bash
user 用户配置节点服务器
--name 登陆的用户名,也就是链接Mycat的用户名app
--password 登陆的密码,也就是链接Mycat的密码负载均衡
--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如须要这个用户须要管理两个数据库db1,db2,则配置db1,dbsui
我这里修改以下(只须要改动user节点信息便可):
<user name="root">
<property name="password">123456</property>
<property name="schemas">db_test</property>
</user>
复制代码
<?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 ->S1 , M2->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 start
mysql -uroot -p123456 -P8066 -h127.0.0.1
#stop
./mycat stop
复制代码
连上以后跟普通的MySQL如出一辙
在外网 (相对虚拟机而言)访问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也是要加上才能本地访问的,否则会被拒绝掉。
示例
这里的common是我本地在host文件里设置了映射到mycat所在虚拟机的ip。
这里能够经过在mycat中插入数据检测是否主从复制配置成功,经过修改从数据库的数据来验证是否读写进行分离。
结果
能够看到,mycat读取的是从库的数据 。这说明了,mycat读写分离功能已经实现了。