JavaEE:MyCat安装/配置

说明:

MyCat是数据库中间件,用于配置MySQL等数据库分片、读写分离等,属于服务端代理。

一、MyCat安装:

1.下载MyCat,用XFtp上传到CentOS7系统/usr/local目录下:

地址:Mycat1.6

2.解压(/usr/local目录下):

[root@localhost local]# tar -xvf Mycat-server-1.6.7.5-release-20210616151418-linux.tar.gz

二、分片配置:

MySQL安装:JavaEE:MySQL安装(rpm方式)/配置_a526001650a的专栏-CSDN博客

MySql1主机:192.168.233.141,端口:3306

MySql2主机:192.168.233.142,端口:3306

1.配置逻辑数据库、用户名/密码:

打开server.xml(/usr/local/mycat/conf目录下):

[root@localhost conf]# vi server.xml

修改内容如下,可增加多个<user>:

<mycat:server xmlns:mycat="http://io.mycat/">
   ...
   <!--配置MyCat用户1,默认用户,此处为root用户名-->
   <user name="root" defaultAccount="true">
      <property name="password">root</property><!--配置MyCat密码-->
      <property name="schemas">mycat_db</property><!--配置MyCat逻辑数据库名称-->
      <property name="defaultSchema">mycat_db</property>
   </user>
   <!--配置MyCat用户2,此处为yyh用户名-->
   <user name="yyh">
      <property name="password">123456</property> <!--配置MyCat密码-->
      <property name="schemas">mycat_db</property> <!--配置MyCat逻辑数据库名称-->
      <property name="readOnly">true</property><!-- 只读 -->
      <property name="defaultSchema">mycat_db</property>
   </user>
</mycat:server>

2.配置MyCat逻辑数据库到MySql数据库(此处只配置了分片):

打开schema.xml(/usr/local/mycat/conf目录下):

[root@localhost conf]# vi schema.xml

修改内容如下,一个schema就是一个逻辑数据库:

<mycat:schema ...>
   <schema name="mycat_db" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1"><!--配置mycat逻辑数据库,sqlMaxLimit为mycat查询时单页条数-->
      <!--name属性值配置mysql数据库中的表,多张表用逗号分割(多个表使用这个配置)。dataNode为逻辑库到mysql数据库的映射,属性值为下方dataNode节点name值,多个时用逗号隔开。rule配置取模规则。ruleRequired:true必须设置rule的值,false可以不设-->
      <table name="table_user, table_account" dataNode="dn1,dn2" rule="auto-sharding-long" />
   </schema>
   <!--配置mysql数据库列表-->
   <dataNode name="dn1" dataHost="MySql1" database="mysql_db1" /><!--MySql1为dataHost的name值,mysql_db1为mysql数据库名称-->
   <dataNode name="dn2" dataHost="MySql2" database="mysql_db2" />
   <!--
   maxCon:最大连接数
   minCon:最小连接数
   balance:设置负载均衡类型,0关闭读写分离(读写操作访问writeHost配置的mysql主机)。1在双主双从时除M1外的其他主机参与查询时的负载均衡。2随机访问readHost或writeHost主机。3读操作访问readHost主机(写访问writeHost主机)
   writeType:推荐使用0,0写操作访问第1个writeHost的mysql主机(当第1个宕机时访问第2个writeHost的mysql主机),1随机访问writeHost的mysql主机
   dbType:数据库类型,此处为mysql
   dbDriver:连接驱动,此处使用native
   -->
   <dataHost name="MySql1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><!-- 配置数据库连接数 -->
      <heartbeat>select user()</heartbeat><!--连接的心跳-->
      <writeHost host="M1" url="192.168.233.141:3306" user="root" password="root123456"><!-- 配置mysql写库连接地址:端口、登录用户/密码 -->
         <!-- <readHost host="S1" url="192.168.233.143:3306" user="root" password="root123456" /><!-- balance非0时,配置mysql读库连接地址:端口、登录用户/密码 -->
      </writeHost>
   </dataHost>
   <dataHost name="MySql2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><!-- 配置数据库连接数 -->
      <heartbeat>select user()</heartbeat><!--连接的心跳-->
      <writeHost host="M1" url="192.168.233.142:3306" user="root" password="root123456" /><!-- 配置mysql连接地址:端口、登录用户/密码 -->
   </dataHost>
   ...
</mycat:schema>

3.编辑分片规则:

见三章第1节(1)小节

三、其他配置:

1. 分片规则:

 分片规则文档(9.5章Mycat常用的分片规则):

入门篇-8-10 · 语雀

(1)范围约定,根据id值分配到不同的范围:

查看rule.xml(cd /usr/local/mycat/conf,vi rule.xml):

[root@localhost conf]# vi rule.xml

auto-sharding-long的rule规则如下:

<tableRule name="auto-sharding-long">
        <rule>
                <columns>id</columns>  <!-- 对应表中的id字段 -->
                <algorithm>rang-long</algorithm>
        </rule>
</tableRule>

修改autopartition-long.txt(cd /usr/local/mycat/conf):

[root@localhost conf]# vi autopartition-long.txt 

内容如下:

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0        #id值在此范围的放第0个数据库
500M-1000M=1    #id值在此范围的放第1个数据库
#1000M-1500M=2  #id值在此范围的放第2个数据库,本文只有2个MySql主机节点,注释

(2)分片枚举,适用固定数据的场景,比如省份或区县数据分片保存:

修改schema.xml(cd /usr/local/mycat/conf,vi schema.xml):

<mycat:schema ...>
   <schema ...>
      <!--rule="sharding-by-intfile"配置分片枚举规则-->
      <table ... rule="sharding-by-intfile" />
   </schema>
   ...
</mycat:schema>

修改rule.xml(cd /usr/local/mycat/conf,vi rule.xml):

<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
   <property name="mapFile">partition-hash-int.txt</property>
   <property name="type">0</property> <!-- type默认值为0,0表示Integer,非零表示String,
所有的节点配置都是从0开始,及0代表节点1 -->
   <property name="defaultNode">0</property><!--  defaultNode配置默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点。碰到不识别的枚举值,使用默认节点(不配置默认节点时遇到不识别的枚举值会报错)。 -->
</function>

修改partition-hash-int.txt(cd /usr/local/mycat/conf,vi partition-hash-int.txt):

10000=0
10010=1

 (3)取模,id % count = 模值,模值与节点编号对应:

修改schema.xml(cd /usr/local/mycat/conf,vi schema.xml):

<mycat:schema ...>
   <schema ...>
      <!--rule="mod-long"配置取模规则-->
      <table ... rule="mod-long" />
   </schema>
   ...
</mycat:schema>

修改rule.xml(cd /usr/local/mycat/conf,vi rule.xml):

 <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <property name="count">3</property>  <!-- 取模的除数,模值 = id % count -->
</function>

2.配置全局表(cd /usr/local/mycat/conf,vi schema.xml):

<mycat:schema ...>
   <schema ...>
      <!--type="global"配置当前表为全局表,数据存一张表,不分片-->
      <table ... type="global" />
   </schema>
   ...
</mycat:schema>

3.配置子表分片(共用父表的分片规则):

<mycat:schema ...>
   <schema ...>
      <table ...>
         <!--、
         childTable:定义分片子表
         name:子表名称
         joinKey:子表的分片列(以此列值的进行分片),与父表parentKey关联(一般为父表id)
         parentKey:父表的id列,与子表joinKey关联
         primaryKey:子表主键,同table标签
         needAddLimit:同table标签
         例:
         父表-dep表:     id列
         子表-子表user表:dep_id列
         -->
         <childTable name="子表名" joinKey="子表列名(如dep_id)" parentKey="父表列名(如id)" />
      </table>
   </schema>
   ...
</mycat:schema>

 4.配置读写分离:

(1)MySQL主从搭建(主MySQL用于写数据,从MySQL用于读数据):

JavaEE:MySQL主从配置_a526001650a的专栏-CSDN博客

(2)配置读写分离(cd /usr/local/mycat/conf,vi schema.xml):

<mycat:schema ...>
   ...
   <!--
   balance:设置负载均衡类型,0关闭读写分离(读写操作访问writeHost配置的mysql主机)。1在双主双从时除M1外的其他主机参与查询时的负载均衡。2随机访问readHost或writeHost主机。3读操作访问readHost主机(写访问writeHost主机)
   -->
   <dataHost ... balance="3" ><!-- 3打开读写分离配置,读操作访问readHost主机(写访问writeHost主机) -->
      <heartbeat>select user()</heartbeat><!--连接的心跳-->
      <writeHost host="M1" url="主MySQL主机IP地址:3306" user="root" password="root123456"> <!-- 配置mysql写库连接地址:端口、登录用户/密码 -->
         <readHost host="S1" url="从MySQL主机IP地址:3306" user="root" password="root123456" /><!-- 配置mysql读库连接地址:端口、登录用户/密码 -->
      </writeHost>
   </dataHost>
   ...
</mycat:schema>

四、启动/停止(/usr/local/mycat//bin目录):

1.启动:

[root@localhost bin]# ./mycat start

以控制台方式启动:

[root@localhost bin]# ./mycat console

2.重启:

[root@localhost bin]# ./mycat restart

3.看状态:

[root@localhost bin]# ./mycat status

4.停止:

[root@localhost bin]# ./mycat stop

五、使用Navicat连接远程的MyCat逻辑库:

1.下载并安装Navicat:

Navicat | 下载 Navicat for MySQL 14 天免费 Windows、macOS 和 Linux 的试用版

2.使用Navicat连接远程的MyCat逻辑库:

(1)打开Navicat软件,点击"连接"按钮,在下拉列表中选择"MySQL...":


(2)新建连接,填入远程MyCat的主机IP、MyCat端口(8066)、MyCat登录用户+密码,确定:

(3)连接成功后如图所示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值