分库分表之MyCat配置初体验
MyCat配置文件目录
进入到MyCat目录 cd /opt/mycat
/conf目录下主要的文件
--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几乎保存了所有MyCat需要的系统配置信息。
其在代码内直接的映射类为SystemConfig
package io.mycat.config.model.SystemConfig。
两个用户, 一个是root, 一个是user
vim server.xml
vim schema.xml原始配置文件
root是默认的账号, 配置的“xiaoyege”账号可以通过Navicat连接mycat。
Navicat连接MyCat时, 直接使用这个账号密码连接即可。
修改后的server.xml文件如下。
Navicat连接mycat。
server.xml中的标签本就不多,这个标签主要用于定义登录 MyCat 的用户和权限。
例如上面的例子中,我定义了一个用户,用户名为root、密码为 1qaz@WSX,可访问的schema 也只有user一个。
对用户的schema及下级的table进行精细化的DML权限控制,privileges节点中的check 属性是用于标识是否开启DML 权限检查,默认false标识不检查。
当然privileges节点不配置,等同check=false, 由于MyCat一个用户的schemas属性可配置多个schema,所以 privileges的下级节点schema节点同样。
可配置多个,对多库多表进行细粒度的 DML 权限控制。
vim schema.xml
主要是配置是需要分库分表的表
原始文件
配置, 对应具体的数据库 , 修改后的文件
数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost), 为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。
数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。
前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。
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服务, 进行测试
./bin/mycat console
此启动方式可以查看启动的日志
rule.xml配置问题
分片规则是 auto-sharding-long
数据库表user对应的是主键id
id
rang-long
rang-long规则是:
autopartition-long.txt
autopartition-long.txt 这个文件处于/opt/mycat/conf目录下
查看文件内容并修改分片规则即可
0-500M=0
500M-1000M=1
1000M-1500M=2
[root@xiaoyege120 conf]# vim autopartition-long.txt
最后一行注释即可, 我们配置的数据库节点只有两个, 但是这个配置文件是3个, 所以会启动报错;
Caused by: io.MyCat.config.util.ConfigException: SelfCheck### schema user refered by user root is not exist!
原因: Server.xml文件中的user和文件 schema.xml中的标签中的值不一致导致
将schema.xml值修改即可
再次启动
jvm 1 | Caused by: io.MyCat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user user is not exist!
server.xml中用户标签中的schema需要进行配置
修改为:
Navicat连接MyCat以后, 我们并没有在MyCat新建表user, 但是这里已经存在表了。
mycat默认连接端口是8066, 也可以修改, server.xml文件修改即可。
mycat管理界面端口是9066, 用于刷新mycat的配置信息, 当我们修改了mycat的配置文件后, 不用每一次都要重启, 在管理界面刷新一下配置即可。
但是这个刷新比较耗时, 有时候执行命令后会报错, 等待一会再次刷新即可。
刷新配置命令: reload @@config_all;
修改端口:
server.xml 的
name="serverPort">8066和9066,
数据落在db100
mycat120插入数据
INSERT user(id,username) VALUES(1,'小耶哥db100');
查询 120MyCat
select * from user;
数据插入成功, 根据分片规则
id 在[1,500*10000]会落在db100, 也就是192.168.8.100这台服务器, 查询db100, 有数据, 如下图:
不会落在db111, 也就是192.168.8.111这台服务器
查询db111, 没有数据, 如下图:
数据落在db111
再重新插入一条数据, 增大id>500*10000, 使其落入db111。
INSERT user(id,username) VALUES(6000000,'小耶哥db111');在db111查询, 有数据, 如下图:
在db100查询则还是只有一条数据(第一次插入的数据), 如下图;
在MyCat mycat120查询, 有数据, 如下图:
参考资料
1 | mycat源码及管网文档
责编 | 小耶哥
本期作者 | 小耶哥
平台建设及技术支持 | 小耶哥