MyCat是一个开源数据库分布式中间件。MyCat是基于阿里Cobar基础之上扩展而来。
Mycat用来解决数据量比较大的数据库效率低下的问题。比如,一头牛拉100公斤的货物能以最高的速度飞驰,并且拉的距离也比较远。但是拉1000公斤的货物就比较慢,拉的距离也比较短;但是,如果将1000公斤货物分10头牛拉,则可以拉的快、多、远。同理,一个数据库数据量过大之后,会导致数据库的性能低下,这时,将数据库的数据分到多个数据库中,类似10头牛拉1000公斤货物。负载均衡了,效率自然高一些。 这就是mycat进行分库分表的效果和作用。本章节简单介绍mycat的安装和配置。
## MyCat配置和安装(Windows版本)
### 1、下载
http://dl.mycat.io/1.6-RELEASE/
MyCat的错误可以在安装目录下的logs文件夹下的wrapper.log中分析。
### 2、准备
允许mysql远程连接:
1、修改mysql库中的user表,给root用户新增一个host字段为%。(待定,直接做第二步)。
2、执行远程授权命令:GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION
在数据库服务器A和数据库服务器B上安装MySQL数据库。然后,在A和B上分别创建db1,和表tb1。
### 3、MyCat系统参数配置(server.xml)
<mycat:server xmlns:mycat="http://org.opencloudb/">
<system>
...
<property name="defaultSqlParser">druidparserproperty>
...
system>
<user name="root">
<property name="password">123456property>
<property name="schemas">TESTDBproperty>
user>
mycat:server>
在schema.xml文件中配置逻辑库和表分片规则。
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<table name="t_user" dataNode="dn1,dn2" rule="sharding-by-mod2"/>
<table name="ht_jy_login_log" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-date_jylog"/>
schema>
<dataNode name="dn1" dataHost="localhost1" database="mycat_node1"/>
<dataNode name="dn2" dataHost="localhost1" database="mycat_node2"/>
<dataHost name="localhost1" writeType="0" switchType="1" slaveThreshold="100" balance="1" dbType="mysql" maxCon="10" minCon="1" dbDriver="native">
<heartbeat>show status like 'wsrep%'heartbeat>
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" >
writeHost>
dataHost>
mycat:schema >
配置说明:
table 标签 是逻辑表的配置
name代表表名,
dataNode代表表对应的分片,
Mycat默认采用分库方式,也就是一个表映射到不同的库上,
rule代表表要采用的数据切分方式,名称对应到rule.xml中的对应配置,如果要分片必须配置。
heartbeat 标签代表Mycat需要对物理库心跳检测的语句,正常情况下生产案例可能配置主从,或者多写 或者单库,无论哪种情况Mycat都需要维持到数据库的数据源连接,因此需要定时检查后端连接可以性,心跳语句就是来作为心跳检测。
writeHost 此标签代表 一个逻辑主机(dataHost)对应的后端的物理主机映射,例如例子中写库hostM1 映射到127.0.0.1:3306。如果后端需要做读写分离或者多写 或者主从则通过配置 多个writeHost 或者readHost即可。
分片规则是非常重要的配置,其决定了数据库切分后的性能好坏。
<mycat:rule xmlns:mycat="http://org.opencloudb/">
<tableRule name="sharding-by-hour">
<rule>
<columns>createTimecolumns>
<algorithm>sharding-by-houralgorithm>
rule>
tableRule>
<function name="sharding-by-hour" class="org.opencloudb.route.function.LatestMonthPartion">
<property name="splitOneDay">24property>
function>
mycat:rule >
name 为schema.xml 中table 标签中对应的 rule=”sharding-by-hour” ,也就是配置表的分片规则,
columns 是表的切分字段: createTime 创建日期。
algorithm 是规则对应的切分规则:映射到function 的name。
function 配置是分片规则的配置。
name 为切分规则的名称,名字人员取,但是需要与tableRule 中匹配。
class 是切分规则对应的切分类,写死,需要哪种规则则配置哪种,例如本例子是按小时分片:org.opencloudb.route.function.LatestMonthPartion
property 标签是切分规则对应的不同属性,不同的切分规则配置不同。
进入mycat的安装目录的bin目录下(或者配置环境变量),以管理员身份打开CMD命令。
1、安装 mycat.bat install
2、启动 mycat.bat start
3、停止 mycat.bat stop
链接:
mysql -u用户名 -p密码 -P8066 -h127.0.0.1
MyCat的链接方式和MySQL一模一样。默认端口是8066。