MyCat分片

需求

把一张表分片存储到三个数据库中

环境

  • Mysql节点环境
    • 操作系统版本 : Centos7
    • 数据库版本 : Mysql-5.6
    • 数据库名 : db1、db2、db3
    • ip:192.168.188.99
  • MyCat节点
    • mycat版本 :1.6 release
    • ip:192.168.188.100

安装MyCat到节点上

MyCat需要有JDK环境的支持所以在运行Mycat之前需要安装JDK.
在这里插入图片描述
MyCat官方网站下载1.6版本的Mycat到节点上,

配置Mycat

配置schema.xml

Schema.xml介绍

Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的**逻辑库、表、**分片规则、DataNode以及DataSource

  • schema 标签用于定义MyCat实例中的逻辑库
  • Table 标签定义了MyCat中的逻辑表
  • dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。
  • dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

Schema.xml文件位置

mycat1.6/mycat/conf

我的Schema.xml文件详细信息





	
		
		
	
	
	
	
		select user()
		
		
		
	
	

	

 
  

server.xml

server.xml保存mycat需要的系统配置信息。最常用的是配置用户名、密码及权限





	
	0  
	0  

		2
       
         
	
	
		
		0
		
		
		
		
		
		
		
		
		0
		
			
		1

		
		1m

		
		1k

		0

		
		384m


		
		true


	
	
	
	
	
	
		123456
		TESTDB
		
		
		
	

	
		user
		TESTDB
		true
	


配置rule.xml

rule.xml定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同.
无需配置,默认就好

测试分片

启动Mycat

在mycat的bin目录下执行命令

./mycat start

在这里插入图片描述
通过查看日志Mycat的日志文件查看Mycat是否启动成功
日志文件位置

mycat/logs/mycat.log
mycat/logs/wrapper.log

这里贴上我的mycat.log文件内容

2019-08-20 23:34:31.422  INFO [WrapperSimpleAppMain] (io.mycat.backend.datasource.PhysicalDBPool.(PhysicalDBPool.java:100)) - total resouces of dataHost localhost1 is :1
2019-08-20 23:34:32.097  INFO [WrapperSimpleAppMain] (io.mycat.cache.CacheService.createLayeredPool(CacheService.java:125)) - create layer cache pool TableID2DataNodeCache of type encache ,default cache size 10000 ,default expire seconds18000
2019-08-20 23:34:32.113  INFO [WrapperSimpleAppMain] (io.mycat.cache.DefaultLayedCachePool.createChildCache(DefaultLayedCachePool.java:80)) - create child Cache: TESTDB_ORDERS for layered cache TableID2DataNodeCache, size 50000, expire seconds 18000
2019-08-20 23:34:33.482  INFO [WrapperSimpleAppMain] (io.mycat.config.classloader.DynaClassLoader.(DynaClassLoader.java:34)) - dyna class load from ./catlet,and auto check for class file modified every 60 seconds
2019-08-20 23:34:33.483  INFO [WrapperSimpleAppMain] (io.mycat.MycatServer.startup(MycatServer.java:266)) - ===============================================
2019-08-20 23:34:33.483  INFO [WrapperSimpleAppMain] (io.mycat.MycatServer.startup(MycatServer.java:267)) - MyCat is ready to startup ...
2019-08-20 23:34:33.483  INFO [WrapperSimpleAppMain] (io.mycat.MycatServer.startup(MycatServer.java:279)) - Startup processors ...,total processors:1,aio thread pool size:4    
 each process allocated socket buffer pool  bytes ,a page size:2097152  a page's chunk number(PageSize/ChunkSize) is:512  buffer page's number is:20
2019-08-20 23:34:33.483  INFO [WrapperSimpleAppMain] (io.mycat.MycatServer.startup(MycatServer.java:280)) - sysconfig params:SystemConfig [processorBufferLocalPercent=100, frontSocketSoRcvbuf=1048576, frontSocketSoSndbuf=4194304, backSocketSoRcvbuf=4194304, backSocketSoSndbuf=1048576, frontSocketNoDelay=1, backSocketNoDelay=1, maxStringLiteralLength=65535, frontWriteQueueSize=2048, bindIp=0.0.0.0, serverPort=8066, managerPort=9066, charset=utf8, processors=1, processorExecutor=4, timerExecutor=2, managerExecutor=2, idleTimeout=1800000, catletClassCheckSeconds=60, sqlExecuteTimeout=300, processorCheckPeriod=1000, dataNodeIdleCheckPeriod=300000, dataNodeHeartbeatPeriod=10000, clusterHeartbeatUser=_HEARTBEAT_USER_, clusterHeartbeatPass=_HEARTBEAT_PASS_, clusterHeartbeatPeriod=5000, clusterHeartbeatTimeout=10000, clusterHeartbeatRetry=10, txIsolation=3, parserCommentVersion=50148, sqlRecordCount=10, bufferPoolPageSize=2097152, bufferPoolChunkSize=4096, bufferPoolPageNumber=20, maxResultSet=524288, bigResultSizeSqlCount=10, bufferUsagePercent=80, flowControlRejectStrategy=0, clearBigSqLResultSetMapMs=600000, defaultMaxLimit=100, sequnceHandlerType=2, sqlInterceptor=io.mycat.server.interceptor.impl.DefaultSqlInterceptor, sqlInterceptorType=select, sqlInterceptorFile=/root/mycat1.6/mycat/logs/sql.txt, mutiNodeLimitType=0, mutiNodePatchSize=100, defaultSqlParser=druidparser, usingAIO=0, packetHeaderSize=4, maxPacketSize=16777216, mycatNodeId=1]

创建数据表

在Mysql服务器上根据schema.xml的配置创建三个数据库,分别是db1,db2,db3,然后三个数据库中必须创建一样的表item.

create table item(int id,int age);

MyCat分片_第1张图片

使用Mysql客户端连接Mycat

配置完毕以及在Mysql服务器上创建完数据库之后,重新启动mycat。使用mysql客户端连接mycat
在这里插入图片描述

  • -u:Mycat用户名(默认root)
  • -p:Mycat密码(默认123465)
  • -h:Mycat机IP地址
  • -P:Mycat端口(默认8066)

插入数据进行测试

在连接上数据库之后Mycat会在TESTDB数据库中自动生成一张item表.
MyCat分片_第2张图片

在Mycat客户端插入数据
MyCat分片_第3张图片
这里我们在Mycat客户端插入了6条数据,那么这6条数据会怎么分配呢?会全部分配到db1呢还是?
结果是每个库中两个.
MyCat分片_第4张图片

你可能感兴趣的:(Mysql)