MyCat按需安装配置

发布于 2022-07-20  6.84k 次阅读


#1.下载安装

MyCat的下载链接

下载后的文件:Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz

通过命令解压即可安装完成:

tar -zxvf Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz

#2.前期准备和配置需求

##2.1前期准备

准备好三台服务器,这三台服务器组成一个MySQL集群

主机IP 安装配置MySQL5.7 安装配置MyCat
192.168.68.134 配置完成 需要
192.168.68.133 配置完成 无需
192.168.68.151 配置完成 无需

##2.2配置需求

需求:现在有一种WQL_TB表,它的数据量巨大,现在需要对它进行数据分片。数据分片分别位于三个数据节点,每一个数据节点主机位于不同的服务器上

#3.MyCat配置

##3.1配置schema.xml配置文件

schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataHost

属性 含义
schema 标签用于定义MyCat实例中的逻辑库
table 标签定义了MyCat中的逻辑表
rule rule用于指定分片规则,auto-sharding-long的分片规则是按ID值的范围进行分片。1~5000000为第一片,5000001-10000000为第二片…… 具体设置还要很多
dataNode 标签定义了MyCat中的数据节点,也就是我们通常所说的数据分片
dataHost 标签在MyCat逻辑库中作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句

配置:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!--逻辑库-->
    <schema name="WQLDB" checkSQLschema="true" sqlMaxLimit="100">
        <!--逻辑表-->
        <table name="WQL_TB" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    </schema>

    <!--数据节点,绑定dataHost数据源和database数据库-->
    <dataNode name="dn1" dataHost="localhost1" database="wqldb" />
    <dataNode name="dn2" dataHost="localhost2" database="wqldb" />
    <dataNode name="dn3" dataHost="localhost3" database="wqldb" />

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
        <!--心跳检测-->
        <heartbeat>select user()</heartbeat>
        <!--writeHost数据写入节点,也就是数据源-->
        <writeHost host="hostM1" url="jdbc:mysql://192.168.68.151:3306" user="root"
                   password="123456789">
        </writeHost>
    </dataHost>

    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="jdbc:mysql://192.168.68.133:3306" user="root"
                   password="123456789">
        </writeHost>
    </dataHost>

    <dataHost name="localhost3" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="jdbc:mysql://192.168.68.134:3306" user="root"
                   password="123456789">
        </writeHost>
    </dataHost>
</mycat:schema>

注:url的格式是jdbc:mysql://主机名:端口号,不然会报错无效地址

##3.2配置server.xml文件

server.xml几乎保存了所有mycat需要的系统配置信息,最常用的是此配置用户名、密码以及权限

注:在system中添加UTF-8字段设置,否则存储中文会出现问号

<property name="charset">utf8</property> 

在配置server.xml时只需要配置两个用户即可① root管理员用户 ② 普通用户(只读)

<user name="root" defaultAccount="true">
        <property name="password">123456789</property>
        <property name="schemas">WQLDB</property>
    </user>

<user name="user">
      <property name="password">123456789</property>
      <property name="schemas">WQLDB</property>
      <property name="readOnly">true</property>
    </user>

#4.分片测试

##4.1启动MyCat

在启动前需要做两个操作:
1. 测试本地数据库是否可以连接
2. 关闭防火墙

mycat系列命令:
1 启动:bin/mycat start
2 关闭:bin/mycat stop
3 重启:bin/mycat status

操作MyCat的步骤:
1. 启动MyCat
2. 通过连接命令连接Mycat(连接端口8066)

① 启动mycat:
- 控制台启动:./mycat console
- 后台启动:./mycat start

[root@rabbitmq1 bin]# ./mycat start
Starting Mycat-server...
[root@rabbitmq1 bin]# ./mycat status
Mycat-server is running (11727).

② 通过连接命令连接Mycat(在安装MyCat机器执行)

mysql -h 192.168.68.133 -P 8066 -u root -p

③ 通过可视化数据库工具连接MyCat

##4.2分片测试

1) 创建一张逻辑表WQL_TB

CREATE TABLE WQL_TB(
id INT NOT NULL,
name VARCHAR(25),
title TEXT,
PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

注:在schema.xml中定义的逻辑表并没有表结构,需要在Mycat命令行中重新声明表结构

测试:查看连接的mysql是否同步了WQL_TB表

2) 插入数据到WQL_TB表

INSERT INTO WQL_TB(ID,`NAME`,TITLE) VALUES(1,"wql","mycat插入数据1");
INSERT INTO WQL_TB(ID,`NAME`,TITLE) VALUES(2,"fq","mycat插入数据2");
INSERT INTO WQL_TB(ID,`NAME`,TITLE) VALUES(3,"lala","mycat插入数据3");

测试:查看各个节点数据信息

3) 插入id为5000001的数据到WQL_TB表(切分规则)

INSERT INTO WQL_TB(ID,`NAME`,TITLE) VALUES(5000001,"lala","mycat插入数据4");


路漫漫其修远兮,吾将上下而求索