mycat安装&配置 学习


mycat学习:

官网:http://www.mycat.io/


介绍:

参考:http://www.csdn.net/article/2015-07-16/2825228

mycat 是一个开源分布式数据库中间件,主要解决的问题:



简单来说,就是分库分表的问题。mycat 相当于是一个虚拟的数据库,表面上看起来是一个数据库,实际是连接了多个数据库。

原来单库的情况下,如果要分库,配置好 mycat 之后,只需要简单修改代码的数据库连接源即可。

另外,navicat 连接数据库的工具,也可以直接连接 mycat 进行数据库的增删改查。


扫描二维码关注公众号,回复: 1901005 查看本文章

安装

1、下载MyCat  https://github.com/MyCATApache/Mycat-download 选择合适的版本下载

2、安装JDK 需要1.7 或者以上版本  http://blog.csdn.net/linlinv3/article/details/45060705

3、解压   tar -zxvf Mycat-server-1.5.1-RELEASE-20160622153300-linux.tar.gz  

其中JDK存放地址为:/home/lin/soft/jdk1.7.0_79 

MyCat存放地址为:/home/lin/soft/mycat

存放地址根据个人习惯自己放。

修改配置文件:mycat/conf/wrapper.conf

wrapper.java.command=/home/lin/soft/jdk1.7.0_79/bin/java

linux配置mycat的环境变量:

export MYCAT_HOME=/home/lin/soft/mycat


启动mycat:

到 mycat 的 bin 目录下 :cd mycat/bin/

以下是启动停止等 mycat 的 linux 命令:

./mycat start 启动

./mycat stop 停止

./mycat console 前台运行

./mycat restart 重启服务

./mycat pause 暂停

./mycat status 查看启动状态


mycat 的日志路径:mycat/logs/wrapper.log


安装成功之后,需要以下配置 mycat 的配置文件后,可以连接多个数据库。



配置

参考文章:http://blog.csdn.net/leipeng321123/article/details/50402692
以下是我自己项目中,使用 mycat 进行分库的配置,没有进行分表操作,仅供参考:

schema.xml的配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
		<!-- auto sharding by id (long) -->
		<table name="tb_day_dividendhold" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_day_entrust" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_day_hold" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_day_transaction" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_history_entrust" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_history_hold" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_history_transaction" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		<table name="tb_transactionNo" dataNode="match_db0,match_db1" rule="rule_firm_account" />
		
	</schema>
	<!-- database是数据库的schema -->
	<dataNode name="match_db0" dataHost="localhost1" database="match_db" />
	<dataNode name="match_db1" dataHost="localhost1" database="match_db1" />
	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat> </heartbeat>
		<!-- can have multi write hosts 只是指明IP地址 -->
		<writeHost host="hostM1" url="10.20.135.32:3306" user="root"
				   password="hundsun">
		</writeHost>
		
	</dataHost>
	
</mycat:schema>

说明:我们数据库的 ip 是10.20.135.32:3306,服务下面的数据库有 match_db 和 match_db1 两个

dataNode 是配置数据库的

dataHost 是配置服务器的,所以只需要 ip 和端口

schema 是配置数据库中的表,怎么路由到数据库的,其中 rule 是路由的规则,在 rule.xml 中进行配置

schema 的 name 是 mycat 提供出去的数据库的名称,另外,mycat 提供出去的端口是 8066

checkSQLschema 必须是 true ,下面的路由规则才有效

主要的就这些,具体的规则,参考上面的参考文章的连接,很具体的。

 rule.xml 的配置

由于我们项目使用的是枚举的规则,所以只介绍枚举的规则

其他的分片规则可参考:http://www.cnblogs.com/756623607-zhang/p/6656022.html  往下拉一点,有常用的分片规则:总共十个(基本够用)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">

	<tableRule name="rule_firm_account">
		<rule>
			<columns>firm_account</columns>
			<algorithm>func_firmaccount</algorithm>
		</rule>
	</tableRule>
	
	<!-- 根据firm_account字段拆分撮合库 -->
	<function name="func_firmaccount" class="io.mycat.route.function.PartitionByFileMap">
		<!-- 枚举文档 -->
		<property name="mapFile">sharding-by-enum.txt</property>
		<!-- type默认值为0,0表示Integer,非零表示String -->
	    <property name="type">1</property>
	    <!-- defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点,结点为指定的值 -->
	    <property name="defaultNode">-1</property>
	</function>
	
</mycat:rule>


项目采用枚举类型来分库

sharding-by-enum.txt配置:

0=0
1=1
# 第一个0表示firm_account的取值,后一个0表示index=0的配置的match_db0

配置后的结果是配置的表,根据字段firm_account来分库
firm_account=0,取index=0的配置的match_db0
firm_account=1,取index=1的配置的match_db1

这里的 index 的顺序就是 schema.xml 文件中的 scema 节点下,table 节点里的 dataNode 的配置顺序


server.xml

mycat 提供出去的端口,默认是 8066 

mycat 的用户信息,也在这里配置

以下为参考:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

		<property name="sequnceHandlerType">2</property>

		<property name="processorBufferPoolType">0</property>

		<property name="handleDistributedTransactions">0</property>
		
			<!--
			off heap for merge/order/group/limit      1开启   0关闭
		-->
		<property name="useOffHeapForMerge">1</property>

		<!--
			单位为m
		-->
		<property name="memoryPageSize">1m</property>

		<!--
			单位为k
		-->
		<property name="spillsFileBufferSize">1k</property>

		<property name="useStreamOutput">0</property>

		<!--
			单位为m
		-->
		<property name="systemReserveMemorySize">384m</property>

		<!--是否采用zookeeper协调切换  -->
		<property name="useZKSwitch">true</property>

	</system>

	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>

</mycat:server>





最后,参考一下我们项目的数据源配置:

jdbc.url=jdbc:mysql://10.20.135.32:8066/TESTDB?autoReconnect=true&allowMultiQueries=true  
jdbc.username=root  
jdbc.password=123456  
jdbc.driverClass=com.mysql.jdbc.Driver 


猜你喜欢

转载自blog.csdn.net/u010343544/article/details/78249887