Mycat安装以及server.xml配置、schema.xml配置、rule.xml配置

提示:将对应的mysql的jar放入mycat/lib

server.xml配置

user标签

这个标签主要用于定义登录 mycat 的用户和权限。例如下面的例子中,我们定义了一个用户,用户名为 user、密码也为 user,可访问的 schema为lg_edu_order。

<user name="user"> 
    <property name="password">user</property> 
    <property name="schemas">lg_edu_order</property> 
    <property name="readOnly">true</property> 
    <property name="defaultSchema">lg_edu_order</property> 
</user>

firewall标签

<firewall> 
    <!-- ip白名单 用户对应的可以访问的 ip 地址 --> 
    <whitehost> 
        <host host="127.0.0.*" user="root"/> 
        <host host="127.0.*" user="root"/>
        <host host="127.*" user="root"/> 
        <host host="1*7.*" user="root"/> 
    </whitehost> 
    <!-- 黑名单允许的 权限 后面为默认 --> 
    <blacklist check="true"> 
        <property name="selelctAllow">false</property> 
        <property name="selelctIntoAllow">false</property> 
        <property name="updateAllow">false</property> 
        <property name="insertAllow">false</property> 
        <property name="deletetAllow">false</property> 
        <property name="dropAllow">false</property> 
    </blacklist> 
</firewall>

全局序列号

在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,Mycat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式。

<system> 
    <property name="sequnceHandlerType">0</property> 
</system>

0表示使用本地文件方式;1表示使用数据库方式生成;2表示使用本地时间戳方式;3表示基于ZK与本地配置的分布式ID生成器;4表示使用zookeeper递增方式生成

本地文件

此方式 Mycat 将 sequence 配置到文件中,当使用到 sequence 中的配置后,Mycat 会更下 classpath中的 sequence_conf.properties 文件中 sequence 当前的值。

#default global sequence 
GLOBAL.HISIDS= 
GLOBAL.MINID=10001 
GLOBAL.MAXID=20000 
GLOBAL.CURID=10000 

# self define sequence 
COMPANY.HISIDS= 
COMPANY.MINID=1001 
COMPANY.MAXID=2000 
COMPANY.CURID=1000 

ORDER.HISIDS= 
ORDER.MINID=1001 
ORDER.MAXID=2000 
ORDER.CURID=1000

数据库方式

在数据库中建立一张表,存放 sequence 名称(name),sequence 当前值(current_value),步长(increment) 等信息。

CREATE TABLE MYCAT_SEQUENCE ( 
    name VARCHAR(64) NOT NULL, 
    current_value BIGINT(20) NOT NULL, 
    increment INT NOT NULL DEFAULT 1, 
    PRIMARY KEY (name) 
) ENGINE = InnoDB;

本地时间戳方式

ID为64 位二进制 ,42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加)换算成十进制为 18 位数的 long 类型,每毫秒可以并发 12 位二进制的累加。
在 Mycat 下配置sequence_time_conf.properties文件

WORKID=0-31 任意整数 
DATAACENTERID=0-31 任意整数

每个Mycat 配置的 WORKID、DATAACENTERID 不同,组成唯一标识,总共支持32*32=1024 种组合。

分布式ZK ID生成器

Zk 的连接信息统一在 myid.properties 的 zkURL 属性中配置。基于 ZK 与本地配置的分布式 ID 生成器,InstanceID可以通过ZK自动获取,也可以通过配置文件配置。在sequence_distributed_conf.properties,只要配置INSTANCEID=ZK就表示从 ZK 上获取 InstanceID。

ID 最大为63位二进制,可以承受单机房单机器单线程 1000*(2^6)=640000 的并发。结构如下
    current time millis(微秒时间戳 38 位,可以使用 17 年)
    clusterId(机房或者 ZKid,通过配置文件配置,5 位)
    instanceId(实例 ID,可以通过 ZK 或者配置文件获取,5 位)
    threadId(线程 ID,9 位)
    increment(自增,6 位)

ZK递增方式

Zk的连接信息统一在 myid.properties 的 zkURL 属性中配置。需要配置sequence_conf.properties文件

TABLE.MINID 某线程当前区间内最小值
TABLE.MAXID 某线程当前区间内最大值
TABLE.CURID 某线程当前区间内当前值

schema.xml配置

schema.xml 作为 Mycat 中重要的配置文件之一,管理着 Mycat 的逻辑库、表、分片节点、主机等信息。

schema标签

schema 标签用于定义 Mycat 实例中的逻辑库,Mycat 可以有多个逻辑库,每个逻辑库都有自己的相关配 置。可以使用 schema 标签来划分这些不同的逻辑库。

<!-- 逻辑库 --> 
<schema name="lg_edu_order" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
属性名数量限制说明
dataNode任意String(0…1)分片节点
sqlMaxLimitInteger(1)查询返回的记录数限制limit
checkSQLschemaBoolean(1)是否去表库名

table标签

table标签定义了 Mycat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义

<table name="b_order" dataNode="dn1,dn2" rule="b_order_rule" primaryKey="ID" autoIncrement="true"/>
属性数量限制说明
nameString(1)逻辑表名
dataNodeString(1…*)分片节点
ruleString(0…1)分片规则
ruleRequiredBoolean(0…1)是否强制绑定分片规则
primaryKeyString(1)主键
typeString(0…1)逻辑表类型,全局表、普通表
autoIncrementBoolean(0…1)自增长主键
subTablesString(1)分表
needAddLimitBoolean(0…1)是否为查询SQL自动加limit限制

dataNode标签

dataNode标签定义了 MyCat 中的分片节点,也就是我们通常说所的数据分片。

<!-- 数据节点 --> 
<dataNode name="dn1" dataHost="lg_edu_order_1" database="lg_edu_order_1" />


name: 定义数据节点的名字,这个名字需要是唯一的,我们需要在 table 标签上应用这个名字,来建立表与分片对应的关系。

dataHost : 用于定义该分片属于哪个分片主机,属性值是引用 dataHost 标签上定义的 name 属性。

database: 用于定义该分片节点属于哪个具体的库。

dataHost标签

dataHost标签在 Mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句

<dataHost name="lg_edu_order_1" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
</dataHost>
属性数量限制说明
nameString(1)节点主机名
maxConInteger(1)最大连接数
minConInteger(1)最小连接数
balanceInteger(1)读操作负载均衡类型
writeTypeInteger(1)写操作负载均衡类型
dbTypeString(1)数据库类型
dbDriverString(1)数据库驱动
switchTypeString(1)主从切换类型

heartbeat标签

heartbeat标签内指明用于和后端数据库进行心跳检查的语句。例如:MySQL 可以使用 select user()、Oracle 可以 使用 select 1 from dual 等
<dataHost> 
    <heartbeat>select user()</heartbeat> 
</dataHost>

writeHost和readHost标签

writeHost和readHost标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机, 那么这个 writeHost 绑定的所有 readHost都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测 到,并切换到备用的 writeHost上去。

<dataHost name="lg_edu_order_2" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
    <heartbeat>select user()</heartbeat> 
    <writeHost host="M1" url="192.168.95.133:3306" user="root" password="1234"> </writeHost> 
</dataHost>
属性数量限制说明
hostString(1)主机名
urlString(1)连接字符串
passwordString(1)密码
userString(1)用户名
weightString(1)权重
usingDecryptString(1)是否对密码加密,默认0

rule.xml配置

rule.xml用于定义Mycat的分片规则。

tableRule标签

<tableRule name="c_order_rule"> 
    <rule>
        <columns>user_id</columns> 
        <algorithm>partitionByOrderFunc</algorithm> 
    </rule> 
</tableRule>


name:指定唯一的名字,用于标识不同的表规则。
columns:指定要拆分的列名字。
algorithm:使用 function 标签中的 name 属性,连接表规则和具体路由算法。

function标签

<function name="partitionByOrderFunc" class="io.mycat.route.function.PartitionByMod">
    <property name="count">2</property> 
</function>


name:指定算法的名字。
class:制定路由算法具体的类名字。
property: 为具体算法需要用到的一些属性。

安装Mycat

1、下载mycat

wget http://dl.mycat.org.cn/1.6.7.6/20210730131311/Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz

2、解压

tar -xzvf Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz

3、启动Mycat

进入mycat/bin
启动命令:./mycat start 
停止命令:./mycat stop 
重启命令:./mycat restart 
查看状态:./mycat status

4、访问Mycat

mysql -uroot -proot -h127.0.0.1 -P8066
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一份mycat双主双从的schema.xml配置文件示例: ```xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "mycat_schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 数据库逻辑名,用于在路由时识别 --> <schema name="test_db" checkSQLschema="false" sqlMaxLimit="100"> <!-- 逻辑表定义 --> <table name="user" primaryKey="id" dataNode="dn1,dn2" rule="user_rule" /> <!-- 分片规则定义 --> <rule name="user_rule"> <tableRule name="user_1" ruleType="partition"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> <dataSourceName>ds1</dataSourceName> </tableRule> <tableRule name="user_2" ruleType="partition"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> <value>1</value> </rule> <dataSourceName>ds2</dataSourceName> </tableRule> </rule> <!-- 数据源定义 --> <dataNode name="dn1" dataHost="dh1" database="test_db_1" /> <dataNode name="dn2" dataHost="dh2" database="test_db_2" /> <!-- 数据库连接池定义 --> <dataHost name="dh1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="MYSQL" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_1" user="root" password="root" /> <readHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_1" user="root" password="root" weight="100" /> </dataHost> <dataHost name="dh2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="MYSQL" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_2" user="root" password="root" /> <readHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_2" user="root" password="root" weight="100" /> </dataHost> </schema> </mycat:schema> ``` 这是一个简单的双主双从配置,其中包括: - 一个名为test_db的逻辑库 - 一个名为user的逻辑表,分别映射到dn1和dn2两个数据节点 - user_rule规则定义了两个分片规则(user_1和user_2),用于将数据分散在不同的数据节点上 - 数据源定义了两个数据节点(dn1和dn2),分别连接到两个MySQL实例(test_db_1和test_db_2) - 每个数据节点都有一个读写分离的数据源定义,包括一个写入节点和一个读取节点 注意,这只是一个示例配置文件,实际配置应根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值