vlambda博客
学习文章列表

linux中MyCat(分库分表)入门安装

什么是MyCat

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

image-20210608135202725

下载MyCat

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

安装MyCat

> tar -xzvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
> cp -rf mycat /usr/local

配置MyCat

> vim /etc/profile
MYCAT_HOME=/usr/local/mycat
export PATH=.:${PATH}:${MYCAT_HOME}/bin
source /etc/profile

配置MyCat

配置MyCat账号

> vim conf/server.xml
<user name="test">
    <property name="password">test</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
    <property name="benchmark">11111</property>
    <property name="usingDecrypt">1</property>
    <privileges check="false">
        <schema name="TESTDB" dml="0010">
            <table name="tbl_user" dml="0110"></table>
            <table name="tbl_dynamic" dml="1111"></table>
        </schema>
    </privileges>
</user>

TESTDB是逻辑库

<user>标签主要用于定义登录 mycat 的用户和权限,如上面,定义了一个用户,用户名为 test、密码也为 test,可访问的 schema 也只有 TESTDB 一个。

<property>标签则是具体声明的属性值:

  • user 用户配置节点
  • name 登录的用户名,也就是连接Mycat的用户名
  • password 登录的密码,也就是连接Mycat的密码
  • readOnly true/false,限制用户是否只是可读的
  • benchmark 连接服务降级处理基准值,当前端的整体 connection 数达到基准值是, 对来自该账户的请求开始拒绝连接,0 或不设表示不限制
  • usingDecrypt 是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密
  • schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
  • privileges 配置对用户的 schema 及下级的 table 进行精细化的 DML 权限控制,privileges 节点中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false,由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。insert,update,select,delete 表示0000。如果设置了 schema , 但只设置了个别 table 或 未设置 table 的 DML,会自动继承 schema 的 DML 属性

配置schema.xml

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

    #name的值需要和server.xml中的值对应
    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
        #需注释掉table标签,否则通过mycayt连接时创建的逻辑库中只会生成这travelrecord,address两张表,不会显示真实数据库中的表,注释掉后上面schema标签 需增加dataNode否则报错;
           <!--
            <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>-->
    </schema>

     #name的值和上面schema标签中dataNode相匹配 databaHost可默认,database为真实数据库名称
    <dataNode name="dn1" dataHost="localhost1" database="test" />
    #name的值与dataNode中dataHost相匹配
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                      writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user</heartbeat>
            <!-- can have multi write hosts -->
    #只写服务器的信息,注意这边的密码为主从数据库中对mycat所在服务器授权的密码,并不是服务器的登录密码,可配置多个writeHost
            <writeHost host="192.168.1.128" url="192.168.1.128:3306" user="root" password="123456">
                 <!-- can have multi write hosts -->
                #读属于写,该标签配置只读服务器信息,如果写服务器宕机,读服务器也不能使用,也可配置多个读服务器标签
               <readHost host="192.168.1.129" url="192.168.1.129:3306" user="root"  password="123456" />
            </writeHost>
    </dataHost>

启动MyCat

> mycat start

常用命令

> mycat start 启动
> mycat stop 停止
> mycat console 前台运行
> mycat restart 重启服务
> mycat pause 暂停
> mycat status 查看启动状态

连接mycat

> mysql -uroot -p -P 8066 -h 192.168.1.127

MyCat默认的端口是8066

常用操作

> show databases; //查看所有库
TESTDB
> use TESTDB;     //使用TESTDB库
> show tables;    //查看TESTDB库中所有的表
one
> desc one;       // 查看one表的结构

查看 Mycat 日志

> tail -f logs/wrapper.log

常见错误

Startup failed: Timed out waiting for a signal from the JVM. 
JVM did not exit on request, terminated 

解决方案

> vim conf/wrapper.conf

wrapper.startup.timeout=300 //超时时间300秒 
wrapper.ping.timeout=120

相关文章



近期热文




入门小站
全栈入门知识
235篇原创内容
Official Account