安装MyCat

5. 安装MyCat

5.1 配置JDK

5.2 在主数据库和从数据库都需要完成

  • 开放3306端口
  • 保证root用户可以被mycat访问
  • 在mycat中通过Master数据库的root用户访问Master数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;

5.3 安装Mycat

上传MyCat并且创建目录

mkdir -p /usr/local/mycat 

下载mycat

http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/

解压

tar zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/mycat/

目录介绍

  • bin 目录里是启动脚本
  • conf 目录里是配置文件
  • catlet 为Mycat的一个扩展功能
  • lib 目录里是Mycat和它的依赖jar
  • logs 目录里是console.log用来保存控制台日志,和mycat.log用来保存mycat的log4j日志

5.4Mycat结构图

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说。访问的都是Mycat,不会接触到后端的数据库,我们现在做一个主从,读写分离。结构如下图:

image-20210104141658872

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件

文件 说明
server.xml Mycat的配置文件,设置账号,参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则

5.3.1 server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
        <property name="ignoreUnknownCommand">0</property><!-- 0遇上没有实现的报文(Unknown command:),就会报错、1为忽略该报文,返回ok报文。
        在某些mysql客户端存在客户端已经登录的时候还会继续发送登录报文,mycat会报错,该设置可以绕过这个错误-->
        <property name="useHandshakeV10">1</property>
    <property name="removeGraveAccent">1</property>
        <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
                <property name="sqlExecuteTimeout">300</property>  <!-- SQL 执行超时 单位:秒-->
                <property name="sequnceHandlerType">1</property>
                <!--<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
                INSERT INTO `travelrecord` (`id`,user_id) VALUES ('next value for MYCATSEQ_GLOBAL',"xxx");
                -->
                <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
                <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
        <property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
        <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
        <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!-- 
        <property name="processors">1</property> 
        <property name="processorExecutor">32</property> 
         -->
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
                <property name="processorBufferPoolType">0</property>
                <!--默认是65535 64K 用于sql解析时最大文本长度 -->
                <!--<property name="maxStringLiteralLength">65535</property>-->
                <!--<property name="sequnceHandlerType">0</property>-->
                <!--<property name="backSocketNoDelay">1</property>-->

配置Mycat服务信息

如:Mycat中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等

标签 释义
–user 用户配置节点
–name 登录的用户名 ,也就是连接MyCat的用户名
–password 登录密码 也就是连接MyCat的密码
–schemas 逻辑库名,这里会和schema.xml 中的配置关联,多个用逗号分开,例如需要这个用户管理两个数据库db1, db2,则配置代表db1,db2
–privileges 配置用户针对表的增删改查的权限

默认配置了一个账号root密码是123456,针对数据库TESTDB,读写权限都有,没有针对表做 任何特殊的权限。

配置权限

权限 内容 权限码
dml Insert update select delete 0000

dml权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000–> 1111,0为禁 止权限,1为开启权限。

5.3.2 schema.xml配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
        <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>   
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost1" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="localhost:3306" user="root"password="123456">
                </writeHost>       
        </dataHost>
</mycat:schema>

用于定义逻辑库和逻辑表的配置文件

在配置文件中可以定义读写分离,逻辑库,逻辑表 dataHost dataNode 等信息

标签 释义
schema 配置逻辑库,name与server.xml 中 schema对应
dataHost 物理数据库,真正存储数据的数据库
dataNode 定义数据节点的标签,也就是分库相关配置

节点与属性介绍

  • 标签schema配置逻辑库的标签

    • 属性name:逻辑库名称

    • 属性checkSQLschema:是否检查SQL语法中的schema信息

      如:Mycat逻辑库名称A, dataNode名称B SQL:select * from A.table;

    • checkSQLschema值是true, Mycat发送到数据库的SQL是 select * from table;

    • checkSQLschema值是false,Mycat发送的数据库的SQL是 select * from A.table

    • sqlMaxLimit:Mycat在执行SQL的时候,如果SQL语句中没有limit子句.自动增加limit子句. 避免一次性 得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果SQL中有具体的limit子句,当前属 性失效.

    • SQL : select * from table . mycat 解析后: select * from table limit 100

    • SQL : select * from table limit 10 . mycat不做任何操作修改.

  • 标签table:定义逻辑表的标签

    • 属性name:逻辑表名
    • 属性dataNode:数据节点名称. 即物理数据库中的 database 名称.多个名称使用逗号分隔
    • 属性rule:分片规则名称.具体的规则名称参考 rule.xml 配置文件.
  • 标签dataNode:定义数据节点的标签

    • 属性name:数据节点名称, 是定义的逻辑名称,对应具体的物理数据库database
    • 属性dataHost:引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息.
    • 属性database:在dataHost物理机中,具体的物理数据库database名称.
  • 标签dataHost:定义数据主机的标签

    • 属性name:定义逻辑上的数据主机名称
    • 属性maxCon/minCon:最大连接数, max connections,最小连接数, min connections
    • 属性dbType:数据库类型 : mysql 数据库
    • 属性dbDriver:数据库驱动类型, native,使用 mycat 提供的本地驱动.
    • dataHost子标签writeHost:写数据的数据库定义标签. 实现读写分离操作.
      • 属性host:数据库命名
      • 属性url:数据库访问路径
      • 属性user:数据库访问用户名
      • 属性password:访问用户密码
      • writeHost子标签readHost
        • 属性host:数据库命名
        • 属性url:数据库访问路径
        • 属性user:数据库访问用户名
        • 属性password: 数据库访问密码

rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="rule1">
                <rule>
                        <columns>id</columns>
                        <algorithm>func1</algorithm>
                </rule>
        </tableRule>

        <tableRule name="sharding-by-date">
                <rule>
                        <columns>createTime</columns>
                        <algorithm>partbyday</algorithm>
                </rule>
        </tableRule>

        <tableRule name="rule2">
                <rule>
                        <columns>user_id</columns>
                        <algorithm>func1</algorithm>
                </rule>
        </tableRule>

        <tableRule name="sharding-by-intfile">
                <rule>
                        <columns>sharding_id</columns>
                        <algorithm>hash-int</algorithm>
                </rule>
        </tableRule>

用于定义分片规则的配置文件.

mycat 默认的分片规则: 以500万为单位,实现分片规则. 逻辑库A对应dataNode-db1和db2. 1-500万保存在db1中, 500万零1到1000万保存在db2 中,1000万零1到1500万保存在db1中.依次类推.

<tableRule name="rule1">
      <rule>
         <columns>id</columns>
         <algorithm>func1</algorithm>
      </rule>
</tableRule>

tableRule

标签 释义
name 属性指定唯一的名字,用于标识不同的分片规则。内嵌的rule标签则指定对物理表中的那一列进行拆分和使用什么分片算法
columns 指定要拆分的列名字
algorithm 使用function标签中的name属性。连接表规则和具体分片算法。table标签内使用,让逻辑表使用这个规则进行分片

function

image-20210104164442125

标签 释义
name 指定算法的名字
class 制定分片算法具体类名字
property 为具体算法需要用到的一些属性

猜你喜欢

转载自blog.csdn.net/zhanduo0118/article/details/112257833