安装、配置
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] |