MyCat实现水平分库

MyCat实现水平分库

mycat的关键特性

  • 支持 SQL 92标准

  • 支持Mysql集群,可以作为Proxy使用

  • 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用

  • 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群

  • 自动故障切换,高可用性

  • 支持读写分离,支持Mysql双主多从,以及一主多从的模式

  • 支持全局表,数据自动分片到多个节点,用于高效表关联查询

  • 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询

  • 多平台支持,部署和实施简单

为什么要进行水平分库
(1)集中式处理,势必造成性能瓶颈;

(2)应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;

(3) 集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。

在这种形势下,集中式数据库将向分布式数据库发展。

mycat的分片规则
一共有10种,今天只讲一种:取余

例子分片
1%3=1第二个分片
2%3=2第三个分片
3%3=0第一个分片

测试分片

首先我们需要安装好了的两个容器,分别为mysql及mycat。
在mycat中需要一张表,同时在mysql中建三个数据库,分别为dm_order1,dm_order2,dm_order3,并在这3个数据库分别建1张表和mycat主表结构一样,这样对应待会分过来的数据。
我这里使用的是partainer,进入mycat容器,找到console,进去,然后到这个界面,点击
提示如果你用的是普通docker安装容器的,执行以下命令::

1. docker ps -a 查询所有容器包括未启动的:
2. docker start + 容器名字 就进去了:

在这里插入图片描述
进入容器以后,找到mycat下的conf目录下3个配置文件:

  1. schema.xml:主要是对数据库的逻辑操作
    将以下内容放入mycat:schema标签里:
<schema name="dm_order" checkSQLschema="false" sqlMaxLimit="100">
   <!-- 需要对那张表进行分片     节点名称,对应下面datanode标签           分片规则 -->
		<table name="dm_order" dataNode="dn1,dn2,dn3" rule="auto-sharding-rang-mod-order"/>
 </schema>
	  <!--  对应什么取得节点名       主机名 ,也可以加多个主机,这里就用一台名为localhost1        对应要分片的数据库 -->
	<dataNode name="dn1" dataHost="localhost1" database="dm_order1" />
	<dataNode name="dn2" dataHost="localhost1" database="dm_order2" />
	<dataNode name="dn3" dataHost="localhost1" database="dm_order3" />
	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select 1</heartbeat>
	<!--  要分库的url    用户名    密码-->
  <writeHost host="hostM1" url="192.168.83.115:3306" user="root" password="123456">
  </writeHost>
	</dataHost>

rule.xml:主要配置分片规则:

<!--  name对应schema.xml里面配置的规则-->
<tableRule name="auto-sharding-rang-mod-order">
		<rule>
			<columns>id</columns>
			<algorithm>rang-mod-dm</algorithm>
		</rule>
	</tableRule>
 <!-- name对应上面标签algorithm的名字,这里主要是对分片规则的一些参数设置 -->
<function name="rang-mod-dm"  class="io.mycat.route.function.PartitionByMod">
 <!--   也就是对应取余的3 -->
		<property name="count">3</property>
	</function>

server.xml: 在</mycat:server>加以下内容:

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

	<user name="user">
		<property name="password">user</property>
		<!-- ,就是mycat的要分库的表 -->
		<property name="schemas">dm_order</property>
		<property name="readOnly">true</property>
	</user>

连接mycat数据库,向表里添加3条测试数据:
在这里插入图片描述
然后在mysql刷新一下,3个数据就都有对应分片规则的数据了:
order1里就有第三条数据了。
在这里插入图片描述
end …

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见更优秀的自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值