前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mycat入门教程

Mycat入门教程

作者头像
allsmallpig
发布2021-02-25 10:32:54
3020
发布2021-02-25 10:32:54
举报
文章被收录于专栏:allsmallpi博客

转载自 http://blog.csdn.net/u013467442/article/details/56955846

mycat介绍

  • 介绍在官方网站上有比较详细的介绍,在这里复制粘贴没什么意思,大家到官网上看
  • 官网链接

前置条件

本教程是在window环境下运行的,实际生产推荐在Linux上运行。  必备条件(自行安装,如果不会装请先打好基础在来学习):

  • JDK:建议是1.7及其以上。
  • MySQL:必须是5.5及其以上。

拓扑结构

这里写图片描述
这里写图片描述
  • 两张表users和item,三个数据库db01,db02,db03(三个库在一个数据库实例上)
  • users只在db01中存储。
  • item表被分割到db02和db03中存储。
代码语言:sql
复制
create database db01; 

 CREATE TABLE users (  
    id INT NOT NULL AUTO_INCREMENT,  
    name varchar(50) NOT NULL default '',  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;  

在db02和db03中分别创建item表,SQL脚本如下

代码语言:sql
复制
create database db02;  
 CREATE TABLE item (  
    id INT NOT NULL AUTO_INCREMENT,  
    value INT NOT NULL default 0,  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database db03;  
CREATE TABLE item (  
    id INT NOT NULL AUTO_INCREMENT,  
    value INT NOT NULL default 0,  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8; 

开始使用

  • 先打mycat官方网站上下载安装包,网址为mycat 下载图如下所示: 
下载图示
下载图示
  • 然后在conf目录下编辑service.xml,rule.xml,schema.xml三个文件。
  • service.xml主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等
  • role.xml主要配置路由策略,主要有分片的片键,拆分的策略(取模还是按区间划分等)
  • schema.xml文件主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。
  • 配置如下所示:
  • server.xml
代码语言:html
复制
<mycat:server xmlns:mycat="http://io.mycat/">  
        <system>  
              
                <property name="defaultSqlParser">druidparserproperty>  
                <property name="mutiNodeLimitType">1property>  
                <property name="serverPort">8066property>  
                <property name="managerPort">9066property>   
        system>  
          
        <user name="test">  
                <property name="password">testproperty>  
                <property name="schemas">TESTDBproperty>  
        user>  

        <user name="user">  
                <property name="password">userproperty>  
                <property name="schemas">TESTDBproperty>  
                <property name="readOnly">trueproperty>  
        user>  
          
mycat:server>  
  • role.xml  该路由表表明采用mod2的方式进行路由。通过下面可知是对item表的id键进行取模分表的,取模分到db02和db03,而users表直接路由到db01中。
代码语言:html
复制
<mycat:rule xmlns:mycat="http://io.mycat/">

    <tableRule name="role1">
        <rule>
            <columns>idcolumns>
            <algorithm>mod-longalgorithm>
        rule>
    tableRule>

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        
        <property name="count">2property>
    function>
mycat:rule>
  • schema.xml 数据库的url,usename,password按实际情况填写。
代码语言:html
复制
<mycat:schema xmlns:mycat="http://io.mycat/">  

      
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">  
        <table name="users" primaryKey="id"  dataNode="node_db01" />  
        <table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="role1" />  

    schema>  

      
    <dataNode name="node_db01" dataHost="dataHost01" database="db01" />  
    <dataNode name="node_db02" dataHost="dataHost01" database="db02" />  
    <dataNode name="node_db03" dataHost="dataHost01" database="db03" />  

      
    <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
            <heartbeat>select user()heartbeat>  
            <writeHost host="server1" url="127.0.0.1:3306" user="root" password="123456"/>  
    dataHost>  
mycat:schema>

启动测试

  • 在命令行切换到bin目录下,然后执行如下命令: 
这里写图片描述
这里写图片描述

正确启动后会显示如下命令: 

这里写图片描述
这里写图片描述

然后表示我们启动服务成功。

验证结果

  • 在命令行访问mycat逻辑数据库,采用如下的命令:

mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB

  • 现在通过数据库查询数据库和表,发现只有逻辑数据库TESTDB而不是db01, db02, db03;而且表也是统一显示的,而不是分布在不同的实际数据库中。参考图片如下: 
这里写图片描述
这里写图片描述
  • 现在在访问Mycat在数据库中插入数据,看数据能否按照前面配置的路由规则进行分表。
  • 现在执行如下的SQL语句进行数据的插入。
代码语言:sql
复制
insert into users(name,indate) values('kk',now());
insert into users(name,indate) values('ss',now());
insert into item(id,value,indate) values(1,100,now());
insert into item(id,value,indate) values(2,100,now());
  • 然后在mycat上查看是否插入成功,下图显示插入成功。 
这里写图片描述
这里写图片描述
  • 然后登录实际的数据库,看分表是否成功。下图显示分表成功。 
这里写图片描述
这里写图片描述

图上显示,插入的users表中的数据全部在db01中,而item表中的数据通过Id取模后均匀的分布在db02和db03中。这样就根据实际的路由策略进行了分表。

  • 测试完成!!~数据进行了分库分表!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mycat介绍
  • 前置条件
  • 拓扑结构
  • 开始使用
  • 启动测试
  • 验证结果
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档