安装、配置

1、安装,官网下载 1.6-RELEASE,Mycat的安装其实只要解压下载的目录就可以了,非常简单。安装完成后,目录如下:

目录 说明
bin mycat命令,启动、重启、停止等
catlet catlet为Mycat的一个扩展功能
conf Mycat 配置信息
lib Mycat引用的jar包,Mycat是java开发的
logs 日志文件,包括Mycat启动的日志和运行的日志。

2、配置,Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

文件 说明
server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则

 

读写分离

配置读写分离之前,mysql 需要配置主从复制

1、在 server.xml 文件中配置 MyCat 的用户和密码等基本信息,server.xml 中其他配置省略,这里只有 user 的配置

...

<user name="root">

    <property name="password">root</property>

    <property name="schemas">testDB</property>

    <property name="readOnly">false</property>

</user>

...

参数 说明
user 用户配置节点
--name 登录的用户名,也就是连接Mycat的用户名
--password 登录的密码,也就是连接Mycat的密码
--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
--privileges 配置用户针对表的增删改查的权限,具体见文档吧

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

<mycat:schema xmlns:mycat="http://io.mycat/">

 

    <!-- 数据库配置,与server.xml中的数据库对应 -->

    <schema name="testDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode1"></schema>

 

    <!-- 分片配置 -->

    <dataNode name="testNode1" dataHost="localhost1" database="test" />

 

    <!-- 物理数据库配置 -->

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

        <heartbeat>select user();</heartbeat>

        <writeHost host="hostMaster" url="192.168.49.130:3306" user="root" password="root">   <!-- 写入的库 -->

            <readHost host="hostSlave" url="192.168.49.131:3306" user="root" password="root"></readHost>    <!-- 读的库 -->

        </writeHost>

    </dataHost>

 

</mycat:schema>

 

参数 说明
schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
dataNode 分片信息,也就是分库相关配置
dataHost 物理数据库,真正存储数据的数据库

每个节点的属性逐一说明

schema:

参数 说明
name 逻辑数据库名,与server.xml中的schema对应
checkSQLschema 数据库前缀相关设置,建议看文档,这里暂时设为folse
sqlMaxLimit select 时默认的limit,避免查询全表

dataNode

参数 说明
name 节点名,与table中dataNode对应
datahost 物理数据库名,与datahost中name对应
database 物理数据库中数据库名

dataHost

参数 说明
name 物理数据库名,与dataNode中dataHost对应
balance 均衡负载的方式
writeType 写入方式
dbType 数据库类型
heartbeat 心跳检测语句,注意语句结尾的分号要加。

3、启动、停止、重启  mycat

shell>./mycat start    # 启动
shell>./mycat stop    # 停止
shell>./mycat restart    #重启

4、连接 mycat

mysql -h localhost -P 9906 -u root -p root

5、日志查看,如果在启动时发现异常,在logs目录中查看日志。

wrapper.log 为程序启动的日志,启动时的问题看这个
mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。

6、测试读写分离

6.1、先执行一条 insert 语句,然后查看 mycat.log 中的日志,fromSlaveDB=false 表示写入的是 master 库,fromSlaveDB=true 表示是 slave 库。我们配置的 master 库 ip 是 192.168.49.130,所以日志中 fromSlaveDB=false,表示写入到了 master 库

[id=3, lastTime=1516445569517, user=root, schema=test, old shema=test, borrowed=true,fromSlaveDB=false, threadId=17, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null,host=192.168.49.130, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

6.2、再执行一条 select 语句,此时 fromSlaveDB=true,表示从 slave 库取的数据,而我们配置的 slave 库 ip 为 192.168.49.131,说明读写分离配置成功。

[id=11, lastTime=1516445571795, user=root, schema=test, old shema=test, borrowed=false,fromSlaveDB=true, threadId=11, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null,host=192.168.49.131, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]