个人网站对MyCat的使用

最近学习了MyCat,也想应用在自己的个人网站(blog.liuffei.cn)上,刚好自己有2台虚拟机,就做了2个分片,全局序列号用于自增blog表的主键,分片规则用的mod-long,对主键取模,分片数量是2,基数的主键会存储在一台机器,偶数的主键会存储在另外一台机器。还把一些字典表设置为全局表,在两个分片上存储,是为了方便join操作。

下载安装MyCAT

MyCAT官网没有办法下载MyCAT Server的安装包,我是找的百度云盘下载的。MyCAT的安装还是比较简单的:

(1)将安装包解压 tar -zxvf xxx.tar.gz
(2)配置conf文件夹下面的schema.xml、rule.xml和server.xml
(3)启动mycat,执行命令bin/mycat start
(4)日志查看logs文件夹下的mycat.log和wrapper.log
(5)停止mycat的运行,执行命令bin/mycat stop

schema.xml配置

schema 标签用于定义MyCat 实例中的逻辑库。
checkSQLschema=“false” 即SQL语句把表示 schema 的字符去掉。
sqlMaxLimit=“100” 每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值(limit 100)。SQL 语句中显式的指定 limit 的大小,不受该属性的约束。如果运行的 schema 为非拆分库的,那么该属性不会生效。需要手动添加 limit 语句。

table 标签定义了 MyCat 中的逻辑表
name属性定义逻辑表的表名,同个 schema 标签中定义的名字必须唯一。
dataNode属性和 dataNode 标签中 name 属性的值相互对应。
rule属性与rule.xml中的tableRule标签的name属性值对应。
primaryKey属性表示该逻辑表对应的主键。
type属性定义逻辑表的类型,表示全局表(global)和普通表。
autoIncrement属性表示使用自增长主键。
在这里插入图片描述
dataNode 标签定义了 MyCat 中的数据节点,一个 dataNode 标签就是一个独立的数据分片。
name属性定义数据节点的名字,需要唯一。
dataHost属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。
database属性用于定义该分片属性哪个具体数据库实例上的具体库。
在这里插入图片描述
dataHost 标签定义了具体的数据库实例、读写分离配置和心跳语句。
name属性唯一标识dataHost标签。
maxCon属性指定每个读写实例连接池的最大连接。
minCon属性指定每个读写实例连接池的最小连接,初始化连接池的大小。
balance属性表示负载均衡类型。
balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。
balance=“2”,所有读操作都随机的在 writeHost、readhost 上分发。
balance=“3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
writeType属性表示负载均衡类型
writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost。
writeType=“1”,所有写操作都随机的发送到配置的 writeHost。

heartbeat标签用于和后端数据库进行心跳检查的语句。

writeHost 标签、readHost 标签,用于实例化后端连接池。writeHost 指定写实例、readHost 指定读实例。
如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去。
host属性用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。
url属性表示后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 address:port 这种形式。用 JDBC 或其他的
dbDriver,则需要特殊指定。当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/。
在这里插入图片描述

rule.xml配置

name指定算法的名字,class制定路由算法具体的类名字。property为具体算法需要用到的一些属性。
在这里插入图片描述

server.xml配置

user标签主要用于定义登录 mycat 的用户和权限
在这里插入图片描述

全局序列号

我采用的是数据库的方式,在一个分片上建立了一个MYCAT_SEQUENCE表,表字段包括自增序列名称name,当前值current_value,自增步长increment。
在这里插入图片描述
还需要创建三个function:

##获取指定序列的值
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET utf8
    DETERMINISTIC
BEGIN
DECLARE retval VARCHAR(64);
SET retval="-999999999,null";
SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR)) INTO retval FROM
MYCAT_SEQUENCE WHERE name = seq_name;
RETURN retval;
END

##获取下一个序列值
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET utf8
    DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END

## 设置序列值
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64) CHARSET utf8
    DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END

表的内容:
在这里插入图片描述
在MyBatis中,获取主键next value for MYCATSEQ_MYCAT,MYCATSEQ_MYCAT是序列的名称。
在这里插入图片描述

参考资料

《MyCAT权威指南》
数据库分库分表,分片配置轻松入门!
mycat常用后端管理命令
mycat的安装和连接
安装Mycat 曾经踩的那些坑
关于mycat配置mysql分库分表时报" io.mycat.config.util.ConfigException: SelfCheck…schema TESTDB refered by user user is not exist"错误问题

猜你喜欢

转载自blog.csdn.net/u012734723/article/details/108632299