微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 …

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐