vlambda博客
学习文章列表

分库分表之MyCat配置初体验


MyCat配置文件目录



进入到MyCat目录 cd  /opt/mycat






/conf目录下主要的文件


分库分表之MyCat配置初体验


--server.xml:是MyCat服务器参数调整和用户授权的配置文件。

--schema.xml:主要是逻辑库, 表以及分片规则定义的配置文件。

--rule.xml:是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCat, 或者通过9066端口进入MyCat manager管理窗口刷新配置即可, 命令如下:

MySQL> reload @@config_all;

--log4j.xml: 日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为debug, debug级别下,会输出更多的信息,方便排查问题。

--lib:     MyCat自身的jar包或依赖的jar包的存放目录。

--logs:  日志存放目录。日志存放在logs/log中,每天一个文件



分片规则文件:



autopartition-long.txt

partition-hash-int.txt

sequence_conf.properties

sequence_db_conf.properties


server.xml



server.xml用户配置


server.xml几乎保存了所有MyCat需要的系统配置信息。

其在代码内直接的映射类为SystemConfig

package io.mycat.config.model.SystemConfig。

两个用户, 一个是root, 一个是user



vim server.xml




vim schema.xml原始配置文件 



分库分表之MyCat配置初体验


root是默认的账号, 配置的“xiaoyege”账号可以通过Navicat连接mycat。

Navicat连接MyCat时, 直接使用这个账号密码连接即可。


修改后的server.xml文件如下。


分库分表之MyCat配置初体验


Navicat连接mycat。


分库分表之MyCat配置初体验


user标签


server.xml中的标签本就不多,这个标签主要用于定义登录 MyCat 的用户和权限。



分库分表之MyCat配置初体验


例如上面的例子中,我定义了一个用户,用户名为root、密码为 1qaz@WSX,可访问的schema 也只有user一个。


 privileges子节点


对用户的schema及下级的table进行精细化的DML权限控制,privileges节点中的check 属性是用于标识是否开启DML 权限检查,默认false标识不检查。

当然privileges节点不配置,等同check=false, 由于MyCat一个用户的schemas属性可配置多个schema,所以 privileges的下级节点schema节点同样。

可配置多个,对多库多表进行细粒度的 DML 权限控制。



分库分表之MyCat配置初体验


schema.xml配置



vim schema.xml




主要是配置是需要分库分表的表


原始文件


分库分表之MyCat配置初体验


配置dataHost节点主机



配置, 对应具体的数据库 , 修改后的文件



分库分表之MyCat配置初体验



分库分表之MyCat配置初体验


数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost), 为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。


配置dataHost分片节点



分库分表之MyCat配置初体验


数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。


配置schema.xml


分库分表之MyCat配置初体验


 配置rule.xml


前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。



MySQL新建数据库及新建表



两个真实的数据库实例, 新建数据库及新建表



两个数据库各新建一张表user。




表名和标签中的table表名保持一致。



CREATE TABLE `user` (

  `id` int NOT NULL AUTO_INCREMENT,

  `username` varchar(255) NOT NULL,

   PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;



 MyCat启动测试机常见错误



 启动MyCat服务, 进行测试



分库分表之MyCat配置初体验



./bin/mycat console



此启动方式可以查看启动的日志


 MyCat启动报错1 分片节点缺少



分库分表之MyCat配置初体验



rule.xml配置问题



分片规则是 auto-sharding-long



数据库表user对应的是主键id


id


rang-long


rang-long规则是:

 autopartition-long.txt


        



分库分表之MyCat配置初体验


autopartition-long.txt 这个文件处于/opt/mycat/conf目录下

查看文件内容并修改分片规则即可


分库分表之MyCat配置初体验



0-500M=0

500M-1000M=1

1000M-1500M=2




分库分表之MyCat配置初体验


[root@xiaoyege120 conf]# vim autopartition-long.txt

最后一行注释即可, 我们配置的数据库节点只有两个, 但是这个配置文件是3个, 所以会启动报错;



分库分表之MyCat配置初体验


启动报错2 用户缺失


Caused by: io.MyCat.config.util.ConfigException: SelfCheck###  schema user refered by user root is not exist!



分库分表之MyCat配置初体验



原因: Server.xml文件中的user和文件 schema.xml中的标签中的值不一致导致




将schema.xml值修改即可



分库分表之MyCat配置初体验



再次启动



分库分表之MyCat配置初体验


启动报错3 TESTDB refered by user user is not exist!



分库分表之MyCat配置初体验


jvm 1    | Caused by: io.MyCat.config.util.ConfigException: SelfCheck###  schema TESTDB refered by user user is not exist!

server.xml中用户标签中的schema需要进行配置



分库分表之MyCat配置初体验


修改为:



分库分表之MyCat配置初体验


MyCat启动成功



分库分表之MyCat配置初体验


MNavicat连接MyCat





分库分表之MyCat配置初体验


Navicat连接MyCat以后, 我们并没有在MyCat新建表user, 但是这里已经存在表了。

mycat默认连接端口是8066, 也可以修改, server.xml文件修改即可。

mycat管理界面端口是9066, 用于刷新mycat的配置信息, 当我们修改了mycat的配置文件后, 不用每一次都要重启, 在管理界面刷新一下配置即可。

但是这个刷新比较耗时, 有时候执行命令后会报错, 等待一会再次刷新即可。



刷新配置命令:  reload @@config_all;




修改端口:


server.xml 的

name="serverPort">8066和9066,


MyCat初体验


数据落在db100

mycat120插入数据


INSERT user(id,username) VALUES(1,'小耶哥db100');



分库分表之MyCat配置初体验



查询 120MyCat


select * from user;



分库分表之MyCat配置初体验


数据插入成功, 根据分片规则


分库分表之MyCat配置初体验


id 在[1,500*10000]会落在db100, 也就是192.168.8.100这台服务器, 查询db100, 有数据, 如下图:



分库分表之MyCat配置初体验


不会落在db111, 也就是192.168.8.111这台服务器


查询db111, 没有数据, 如下图:


分库分表之MyCat配置初体验



数据落在db111



再重新插入一条数据, 增大id>500*10000, 使其落入db111。

INSERT user(id,username) VALUES(6000000,'小耶哥db111');在db111查询, 有数据, 如下图:



分库分表之MyCat配置初体验


在db100查询则还是只有一条数据(第一次插入的数据), 如下图;





在MyCat mycat120查询, 有数据, 如下图:












参考资料

1 | mycat源码及管网文档


责编 | 小耶哥

本期作者 | 小耶哥

平台建设及技术支持 | 小耶哥