动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

Mycat搭建的方法

07-20 12:31 1399浏览
举报 T字号
  • 大字
  • 中字
  • 小字

下载的版本是1.6.7.1

Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz

1.安装(liunx上要安装好jdk,mycat是java写的,所以依赖jdk)

(1)官网下载安装包并上传至liunx

(2)解压

(3)修改/mycat/conf/wrapper.conf文件(学习环境修改,不然会因内存报错)

wrapper.java.additional.10=-Xmx1G
wrapper.java.additional.11=-Xms256M

(4)启动与停止

root@ubuntu-130:/opt/mycat/bin# ./mycat stop
Stopping Mycat-server...
Stopped Mycat-server.
root@ubuntu-130:/opt/mycat/bin# ./mycat start
Starting Mycat-server...

(5)根据业务配置

2.mycat配置文件

server.conf配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	<property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
	<property name="useHandshakeV10">1</property>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 --> 
	<property name="sequnceHandlerType">1</property>
	<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
        <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
	<!-- <property name="processorBufferChunk">40960</property> -->
	<!-- 
	<property name="processors">1</property> 
	<property name="processorExecutor">32</property> 
	 -->
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
		<property name="processorBufferPoolType">0</property>
		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</property>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!--
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
		<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
		<property name="handleDistributedTransactions">0</property>		
			<!--
			off heap for merge/order/group/limit      1开启   0关闭
		-->
		<property name="useOffHeapForMerge">1</property> 
		<!--
			单位为m
		-->
        <property name="memoryPageSize">64k</property> 
		<!--
			单位为k
		-->
		<property name="spillsFileBufferSize">1k</property> 
		<property name="useStreamOutput">0</property> 
		<!--
			单位为m
		-->
		<property name="systemReserveMemorySize">384m</property>
		<!--是否采用zookeeper协调切换  -->
		<property name="useZKSwitch">false</property> 
		<!-- XA Recovery Log日志路径 -->
		<!--<property name="XARecoveryLogBaseDir">./</property>--> 
		<!-- XA Recovery Log日志名称 -->
		<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
		<!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
		<property name="strictTxIsolation">false</property>		
		<property name="useZKSwitch">true</property>		
	</system>	
	<!-- 全局SQL防火墙设置 -->
	<!--白名单可以使用通配符%或着*-->
	<!--例如<host host="127.0.0.*" user="root"/>-->
	<!--例如<host host="127.0.*" user="root"/>-->
	<!--例如<host host="127.*" user="root"/>-->
	<!--例如<host host="1*7.*" user="root"/>-->
	<!--这些配置情况下对于127.0.0.1都能以root账户登录-->
	<!--
	<firewall>
	   <whitehost>
	      <host host="1*7.0.0.*" user="root"/>
	   </whitehost>
       <blacklist check="false">
       </blacklist>
	</firewall>
	--> 
	<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">vip_admin,vip_order,vip_product</property>		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user> 
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">vip_admin,vip_order,vip_product</property>
		<property name="readOnly">true</property>
	</user> 
</mycat:server>

schema配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> 
	<schema name="vip_admin" checkSQLschema="false" sqlMaxLimit="100">
		<table name="user" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="privelege" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="role" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="menu" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="systemlog" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="systemsetting" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long" />
	</schema>	
	<schema name="vip_order" checkSQLschema="false" sqlMaxLimit="100">
		<table name="order" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="discount" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="express" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="orderdetail" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="orderlog" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="orderpay" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
		<table name="ordership" primaryKey="id" dataNode="dn4,dn5,dn6" rule="mod-long" />
	</schema>	
	<schema name="vip_product" checkSQLschema="false" sqlMaxLimit="100">
		<table name="attribute" primaryKey="id" dataNode="dn7,dn8,dn9" rule="mod-long" />
		<table name="attribute_link" primaryKey="id" dataNode="dn7,dn8,dn9" rule="mod-long" />
		<table name="catalog" primaryKey="id" dataNode="dn7,dn8,dn9" rule="mod-long" />
		<table name="product" primaryKey="id" dataNode="dn7,dn8,dn9" rule="mod-long" />
		<table name="spec" primaryKey="id" dataNode="dn7,dn8,dn9" rule="mod-long" />
	</schema> 
	<dataNode name="dn1" dataHost="localhost1" database="vip_admin" />
	<dataNode name="dn2" dataHost="localhost1" database="vip_admin2" />
	<dataNode name="dn3" dataHost="localhost1" database="vip_admin3" />		
	<dataNode name="dn4" dataHost="localhost1" database="vip_order" />
	<dataNode name="dn5" dataHost="localhost1" database="vip_order2" />
	<dataNode name="dn6" dataHost="localhost1" database="vip_order3" />	
	<dataNode name="dn7" dataHost="localhost1" database="vip_product" />
	<dataNode name="dn8" dataHost="localhost1" database="vip_product2" />
	<dataNode name="dn9" dataHost="localhost1" database="vip_product3" /> 
	<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="hostMadmin" url="192.168.13.129:3306" user="root" password="123456">
			<readHost host="hostSadmin" url="192.168.13.130:3306" user="root" password="123456" />
		</writeHost>
	</dataHost>		 
</mycat:schema>

3.测试mycat

select * from `user`;
#id是分片键,1%3=1,所以路由到了vip_admin2数据库,恰好有
select * from `user` WHERE id=1; 
#id是分片键,1%3=1,所以路由到了vip_admin3数据库,没数据,所以就查询不到
select * from `user` WHERE id=2;  
#如果根据非分片键查询,则节点扫描,不如nickname='赵云'则全节点扫描
select * from `user` WHERE nickname='赵云';
#success
INSERT INTO vip_admin.user(id,username, password) VALUES(10005,'ccc','ccc'); 
#[Err] 1064 - bad insert sql (sharding column:ID not provided,INSERT INTO vip_admin.user (username, password) VALUES ('ddd', 'ddd')
INSERT INTO vip_admin.user(username, password) VALUES('ddd','ddd'); 
#success
INSERT INTO vip_admin.user(id,username, password) VALUES(3,'ddd','ddd');

动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看Mycat读写分离视频教程学习哦!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵124
程序员代码小兵124

99篇文章贡献336699字

作者相关文章更多>

推荐相关文章更多>

浅谈数据库索引的原理

代码小兵69606-03 17:02

MySQL的索引为什么使用B+Tree

代码小兵69606-07 17:03

浅谈JDBC是什么

代码小兵12406-08 16:31

MySQL索引的优化

代码小兵12406-08 16:40

JDBC连接数据库

代码小兵12406-08 17:37

发评论

举报

0/150

取消