Mycat 环境
MyCAT是使用JAVA语言进行编写开发,由于MyCAT中使用了JDK7中的一些特性,所以要求必须在JDK7以上的版本上运行
- 安装JDK7以上的版本
- 官网下载安装包解压后配置直接使用
- 官方建议放在usr/local/Mycat 目录下
目录解释
- bin程序目录,存放了window版本和linux版本,除了提供封装成服务的版本之外,也提供了nowrap的shell脚本命令
- ./mycat console,首先要chmod +x *
- mycat 支持的命令{ console | start | stop | restart | status | dump }
- conf目录下存放配置文件
- schema.xml是逻辑库定义和表以及分片定义的配置文件
- rule.xml 是分片规则的配置文件
- server.xml 几乎保存了所有mycat需要的系统配置信息和用户权限
- lib目录下主要存放mycat依赖的一些jar文件
- logs目录存放日志文件
配置参数
schema.xml
定义mycat逻辑库和数据分片(这块属于mycat逻辑上的概念)
定义mycat后端真实服务器的连接
dataHost的2个特殊属性
都是针对的双主双从的场景
server.xml
定义用户权限
只写了跟读写分离相关的参数配置,其他可以查看官网,有很详细的说明
官方参考:http://www.mycat.org.cn/document/mycat-definitive-guide.pdf
配置实例
1、配置主从复制
2、安装JDK环境
3、配置mycat
配置mycat
wget http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz
tar -xzf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz -C /usr/local/
#下载mycat安装包并解压
编辑schema.xml文件
vi /usr/local/mycat/conf/schema.xml
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.26.100:3306" user="root"
password="111111"></writeHost>
<writeHost host="hostS1" url="192.168.26.101:3306" user="root"
password="111111" />
</dataHost>
</mycat:schema>
1、因为我没有配置table标签所有schema 要加上dataNode做为默认节点
2、schema dataNode dataHost 存在字段关联的,最底层就是dataHost
3、单主从建议switchType为-1,不然会导致主从数据不一致问题
问题:
writeHost 的子集是readhost,而如果writeHost 故障就导致readhost也无法读取,这样就不合理了,而解决的方法就是接触双主从,把主从当成双主关系,这边就需要改balance="1"和writeType=“0”,balance是让次主参与读策略,writeType就是让第一个writeHost 配置是写库,这样就不存在子集关系了
编辑server.xml 文件
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mytest</property>
#必配的信息,privileges可选
#把多余关于user的信息删除,不然可能启动mycat报错
启动登入mycat
cd /usr/local/mycat/bin
./mycat console start
#先看下是否启动正常
./mycat start/stop/restart
#后台启动
mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dmytest
#连接mycat的mytest数据库
怎么测试?
借助插入数据库变量@@hostname会显示自己的主机名,前提是binlog_format=STATEMENT,这样从才能执行sql语句
INSERT INTO mytab VALUES(109,@@hostname);