mycat简单安装和配置,mysql分库库表

11 篇文章 0 订阅
6 篇文章 0 订阅

前言

说明

最近从同事那边了解到一些数据库主从读写分离,分片的工具。叫mycat。然后就写下这篇入门博客简单的说一下和mycat有关的内容吧。

准备

mysql5.7。安装2个,做好主从配置。如果不会可以参照我之前的文章docker安装mysql以及主从配置
mycat下载。从mycat官网,上面有本mycat权威指南挺好用的

1.mycat的简短介绍

我使用mycat的原因是它对于代码的没有侵入,相比大家也都看过java的一些主从分离和分片的方案,就是配置多数据源,到用到主库的时候,就调用主库的连接。需要用到从库的时候,就调用从库的连接。
但是使用mycat之后,他相当于给数据库外面再做一层。你每次调用sql语句,等于先到mycat中,mycat再分发到需要操作的数据库中。
例如,一个表根据id分成了10个表。但是实际上在程序员看来,需要写的代码并不需要变化。还是操作一个表。只不过是配置好的mycat的逻辑表,它会给你分发到对应物理表中。

2.mycat的配置说明

mycat的主要配置其实就在于3(或者说4)个文件的配置
分别是:
server.xml
说明:mycat最基本的配置,配置连接的数据库和用户
schema.xml
说明:mycat中逻辑表的具体配置
rule.xml
说明:
mycat中逻辑表需要分片的分片规则的配置文件
以及一个具体的分片规则txt文件。我这边命名为chen.txt

3.表格建立

注意开启主从后这些操作只要在主库进行就可以,从库会自动同步
创一张不需要分片的数据库test,然后创一张表做例子

CREATE TABLE `test`.`test1`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(20), PRIMARY KEY (`id`) );

然后创建需要分片的表的数据库,创建10个数据库,分别是db1-db10。做分片表的数据库位置。

4.server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
		<property name="defaultSqlParser">druidparser</property>
		<!--需要配置的端口号-->
		<property name="serverPort">8066</property>
	</system>
	<user name="master">
	<!--name就是登录名,password就是密码,schemas就是对应的schema.xml里面的逻辑库,就是schemal标签里面的name,注意这个name要和数据库中的库名相同,readOnly就是开启只读-->
		<property name="password">mycat</property>
		<property name="schemas">test</property>
	</user>
	<user name="read">
		<property name="password">mycat</property>
		<property name="schemas">test</property>
		<property name="readOnly">true</property>
	</user>
</mycat:server>

5.schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="test">
		<!--不需要分片的表直接用test处理-->
		<!--注意,name要和逻辑库中的名字相同,dadaNode对应配置,schema name就是service配置文件中需要对应的用户所操作的数据库-->
		<!--需要分片的表的配置-->
			<table name="test2" dataNode="dn$1-10" rule="chen" />
        </schema>
        <dataNode name="test" dataHost="dh1" database="test"></dataNode>
		<!--需要配置需要分片的表-->
		<dataNode name="dn1" dataHost="dh1" database="db1" />
		<dataNode name="dn2" dataHost="dh1" database="db2" />
		<dataNode name="dn3" dataHost="dh1" database="db3" />
		<dataNode name="dn4" dataHost="dh1" database="db4" />
		<dataNode name="dn5" dataHost="dh1" database="db5" />
		<dataNode name="dn6" dataHost="dh1" database="db6" />
		<dataNode name="dn7" dataHost="dh1" database="db7" />
		<dataNode name="dn8" dataHost="dh1" database="db8" />
		<dataNode name="dn9" dataHost="dh1" database="db9" />
		<dataNode name="dn10" dataHost="dh1" database="db10" />
		<!--dataHost就是具体要连接的数据库的,dataBase就是具体的数据库名-->
        <dataHost name="dh1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
				<!--用于验证心跳,这个是mysql主库的配置-->
                <writeHost host="hostM1" url="ip:3306" user="root" password="password">
				<!--具体物理库mysql从库的配置-->
				<readHost host="hostS1" url="ip:3307" user="root" password="password">
                </readHost>
                </writeHost>
        </dataHost>
</mycat:schema>

6.rule.xml

添加

	<tableRule name="chen">
		<rule>
			<columns>id</columns>
			<algorithm>chen-test</algorithm>
		</rule>
	</tableRule>
	<!--schema.xml中配置的rule="chen"所对应的规则,规则对应主键,列名为id-->
	<function name="chen-test"
		class="io.mycat.route.function.AutoPartitionByLong">
		<property name="mapFile">chen.txt</property>
		<!--在conf中需要添加的txt规则文件-->
	</function>

7.chen.txt

0-10=0
10-20=1
20-30=2
30-40=3
40-50=4
50-60=5
60-70=6
70-80=7
80-90=8
90-100=9

表示主键id为0-10的在db1,11-20的在表bd2操作

8.开启服务

win系统,打开bin/startup_nowrap.bat这个文件,提示mycat server startup successfully。
表示启动成功

9.连接mycat,测试数据库操作

打开数据库工具,我用的是sqlyog,配置是locathost/mycat/mycat/8066
然后就可以看到之前创建好的test库中的test表了,然后对test进行相应操作就可以
然后我们需要创建需要分片的表

CREATE TABLE `test2` ( `id` BIGINT(20) NOT NULL, `name` VARCHAR(100) DEFAULT NULL, `date` DATE DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4; 
INSERT INTO test2 (`id`, `name`, `date`) VALUES ('10', '2', '2018-05-28')#插入测试数据
SELECT * FROM test2

创建test2表的时候可以看到,db1-10中,都创建了表test2
然后通过sqlyog连接实际的数据库,发现如果插入对应的数据的时候,1-10会被mycat插入到db1中,11-20会被插入到db2中,以此类推
其次就是查询。mycat会自动把分片表中的数据整合在一起显示出来。这样mycat的配置就算完毕了。
然后在读写分离这边。可以试着关闭主库,进行读操作(select),发现操作都去了从库。关闭从库,进行写操作(delete,update,inser),发现操作都去了主库。

关于mycat-eye

只需要配置安装好一个zookeeper,已经在网页中对数据库做好相应的连接配置即可。非常简单,就不多叙述了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值