当前位置:首页 > 数据库 > 简单使用mycat实现单库分表

简单使用mycat实现单库分表

CSDN停更,所有博客已搬至 rainofshadow.top 个人服务器。 最新文章,移至 https://rainofshadow.top/

 

1.下载安装mycat

通过mycat的官网,下载对应的包,我这里选择安装的linux系统的

http://dl.mycat.io/

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记

上传在服务器某一位置,然后在该目录下解压

tar -xf   Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz 

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记

2.配置mycat

进入 mycat中conf,首先我们需要配置mycat的用户和密码

vi server.xml

找到 user这一栏,默认的应该是123456,本地不改跳过这一步也行,当然服务器上弱口令不是很好..

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记

再修改 schema.xml

vi 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" dataNode='dn01'>
            <table name="r_problem" primaryKey="id" dataNode="dn01" rule="rule1" subTables="r_problem$1-3" />
    </schema>

    <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->
    <dataNode name="dn01" dataHost="dh01" database="recommend" />
    <dataNode name="dn02" dataHost="dh01" database="db02" />

    <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->
    <dataHost name="dh01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
            <heartbeat>select user()</heartbeat>
            <writeHost host="service" url="127.0.0.1:3306" user="root" password="xxxxxxx"/>
    </dataHost>
</mycat:schema>

<schema>:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB,默认是TESTDB,在schema上的 dataNode可以将对应数据库的表全部拿到TESTDB中。

<table>:表示在mycat中的逻辑表配置,逻辑表名称为:r_problem ,映射到两个数据库节点dataNode中,切分规则为:rule1(在rule.xml配置)subTables 是分表 r_problem$1-3 是分为 r_problem1,r_problem2,r_problem3 三个表,我这里只进行了分表,没有分库,要分库 dataNode="dn01,dn02"选择添加下面配置的dataNode就行。

<dataNode>:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.

<dataHost>:真实的数据库的地址配置

<heartbeat>:用户心跳检测

<writeHost>:写库的配置,password是mysql数据库的密码

再修改 rule.xml

vi 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>mod-long</algorithm>
        </rule>
    </tableRule>
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">3</property>
    </function>
</mycat:rule>

count 数一定要和分库分表的结点个数对应,我这里分了3个表,就为3.

3.启动,连接mycat

在mycat 中lib下启动mycat

./bin/mycat { console | start | stop | restart | status | dump }  参数命令

./bin/mycat  start 启动

开放8066端口,然后远程连接

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记  这个密码不是mysql的密码,是之前配置mycat的密码

如果你 2003 连接失败,./bin/mycat  status 检查是否启动 ,又 ./bin/mycat  console检查原因

我遇到的问题在这篇博客解决了.

https://blog.csdn.net/qq_43268365/article/details/86542764

连接成功后

可以修改TESTDB名字,然后在之前的xml改名字.我就默认没改了..

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记

简单测试下

INSERT INTO r_problem(id,xxx) value ('x','x'),('x','x'),('x','x');

然后在连接你的mysql,数据应该就存入了mysql中的r_problem1-3中的某一个表,默认按照取模来存

注意是在mycat中,SELECT * FROM r_problem 就会得到 三个表的数据集合。

在贴一张recommend原数据库的图,和TESTDB是一样的

简单使用mycat实现单库分表 _ JavaClub全栈架构师技术笔记

4.springboot配置

datasource:
  druid:
    url: jdbc:mysql://xxx.xx.xx.xxx:8066/TESTDB?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: xxxxx

把你之前的数据库连接端口改成 8066 ,用户和密码是mycat的,不是之前mysql的.

因为mycat是中间件,之前代码部分不需修改就已经完成了分库分表

值得注意的是

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode='dn01'>
            <table name="r_problem" primaryKey="id" dataNode="dn01" rule="rule1" subTables="r_problem$1-3" />
    </schema>

如果在schema上没有 dataNode ,就只能操作 table的表,其他表虽然在TESTDB显示,但不能被操作 

需要分库分表的表还是需要在table中配置。

 

 

 

 

 

作者:冷心影翼
来源链接:https://blog.csdn.net/TextInfo/article/details/104247272

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/67958.html

标签: 分库分表
分享给朋友: