一、概述
关于Mycat的原理网上有很多,这里不再详述,对于我来说Mycat的功能主要有如下几种:
1.Mysql主从的读写分离
2.Mysql大表分片
3.其他数据库例如Oracle,MSSQL,DB2等的读写分离和分片。
之所以第3点单独列出来只是因为它不常用,而且使用的JDBC,连接Mysql则是直接使用Mysql协议。
对于Mycat的分片功能,由于遇到了几个很严重的BUG,同时分片带来的一系列并发问题比较繁杂,因此测试之后放弃了,这里只讨论读写分离。
二、安装配置
1.安装JDK(要求至少JDK1.7以上)
tar -zxvf jdk-7u80-linux-x64.tar.gz
mv jdk1.7.0_80 /usr/local
vi /etc/profile
添加:
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
之后source /etc/profile生效,并用java -version检查新的jdk版本。
2.安装Mycat
#useradd mycat
#passwd mycat --设置密码 #tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#mv mycat/ /usr/local/ #chown -R mycat.mycat /usr/local/mycat/ #vi /usr/local/mycat/conf/wrapper.conf
wrapper.java.command=%JAVA_HOME%/bin/java
3.文件说明
如上我们将mycat安装到了/usr/local/mycat目录下,我们需要关注的只有2个文件夹conf和logs文件夹:
1)logs文件下只需要关注wrapper.log,这是mycat的日志
2)conf文件下只需要关注server.xml和schema.xml,其他的大多是分片相关的,本文不讨论。
三、读写分离配置
1)当前环境说明:
Mysql 主:mysql01 192.168.20.68
从:mysql02 192.168.20.69
Mycat安装在192.168.20.68上,我们的目的是实现一个名叫leo的库(也叫schema)的读写分离。
2)server.xml配置
关于Mycat性能调优的大多数参数都在此文件中,我们暂不关心,配置读写分离此文件只需要改动如下部分:
我们设置了mycat的用户名和密码是root和123456,此账号密码就是外部程序连接用的可以随意设置,下边的user/user只读用户是默认的可以删掉,不删的话修改下schema即可。
3)schema.xml
此文件就是用于具体配置读写分离的配置文件,废话不多说直接贴出具体的配置文件截图,其他地方无需修改。
图中设置了1个逻辑节点node1,这个node1对应逻辑主机host1,host1配置了writehost=mysql01,readhost=mysql02,真实的数据库连接账号密码leo/leo也是在这里才出现的。
在如上的xml文件中我们只需要关注4个标签,schema/table/dataNode/dataHost, writehost是dataHost的子标签,readhost是writehost的子标签。
其中schema定义了要读写分离的库,最好是真实库名。table定义了表信息,只有分片才用到因此这里直接全部注释。
dataNode定义了逻辑主机dataHost和库名,这里库名必须是真实的。dataHost定义了逻辑主机对应的物理主机,可以有多个写主机,每个写host可以对应多个读host。
writehost和readhost则包含具体的数据库连接信息。
dbDriver表示使用mysql协议,其他数据库选择JDBC。至于其他参数这里不做详细解释,网上很多。
需要注意的这里只有url部分和账号密码部分包含真正的DB连接信息,其他的诸如dbnode,dbhost,database,host等属性全部是虚拟的,只是为了便于识别才写成真实的主机名和库。
4)读写分离测试
启动mycat:/usr/local/mycat/bin/mycat start
连接mycat:mysql -uroot -p123456 -P8066 -h127.0.0.1
Mycat自动连到的是从库,但是有DML操作就会转发到主库,此账户的权限等同于你在writehost和readhost中配置的账户权限。