近来实习公司要求我们要去了解mycat,以后用来搭建分布式数据库。本人就跟着网上的教程内容和官网的权威指南自学了一下,一下是学习过程中自己写的一个比较简单的单主机形式下的分库分表案列。
做案列之前推荐大家可以去看下这一篇博文:https://blog.csdn.net/wrs120/article/details/80417345 感觉写的很不错可以很快了解mycat的配置情况。
首先:在做这个案列的时候需要我们先配置好JDK和mysql的环境,具体网上也有教程,就不再叙述了。
首先配置登陆server.xml文件。默认为用户为root,密码为123456。
与mysql中用户密码对应。
配置逻辑库名,与server.xml name属性对应,其他暂时默认。
定义所需的逻辑表,我这里主要是拿customer表做案列。
配置dataNode数据节点,
定义分片,其中url,user,password属性根据mysql中实际值填写。readHost是之后读写分离所需要的可以先不配置,注释掉。
现在开始在cmd中进行简单的分库分表实列测试:
首先以管理员的身份开启CMD
开启mysql服务,可在计算机管理服务中手动开启,或是在cmd中输入
输入以下命令开启mysql服务。
接着进入mycat的bin根目录下根据下列命令开启mycat服务,将start改为stop停止服务。
注意点:dataNode中的数据库需要先创立否则mycat开启时会报错。同时需要注意所使用的分片规则。
之后根据命令进入mysql8066端口,此端口默认为mycat服务端口。(9066为mycat管理端口。)
通过show databases;列出mysql中现存在的所有数据库,可以看见schema.xml中定义的逻辑库已经存在。
使用use MYDB;命令进入数据库,使用show tables;命令显示出数据库中定义的所有逻辑表。
此时的表真实不存在,只是逻辑存在。我们需要自己创建表。拿customer表为列子。
输入建表sql语句:create table customer (id inr,name varchar(10),sharding_id int),此处sharding_id为枚举分片规则所需。
此时进入db1,db2,db3数据库中会发现其中自动的建立了与之相应的表。
如果在db1,db2,db3中如果已经有了与逻辑表相对应的表,那么就无需再创建。
Customer表所用的是枚举分片,其中根据sharding_id中的值来确定数据到底分到哪一个数据库,函数根据文件partition-hash-int内容实现,开始时默认为两个:
可以根据需求来增加如:
此时我们再customer中插入一条语句:
此时再看db1中customer表可以看见多了一条数据,而其他两个数据库中没有数据,我们通过sharding_id来确定数据到底分到哪一个数据分片中。
再一次在db3中插入一条数据,此次使用sharding_id为10100,如下:
此时我们查询customer表:
可以看到customer表中,根据枚举分片规则将数据分到了不同的数据分片中。
单主机下数据库分库分表完成。