Linux+MySQL+MyCat实现分库分表,通过MyCat数据库中间件实现分库分表配置实战

目录

前言

Linux+MySQL+MyCat实现读写分离,主从同步的解决方案

一、Linux下MySQL数据库服务的安装与部署

二、下载Linux MyCat

三、上传Linux服务器,并解压

四、MyCat主要的配置文件概述

五、创建据库实例

六、配置逻辑库

七、配置数据库节点

八、配置分库分表的规则

九、测试分库分表八步走(天龙八步)


前言

在项目建设过程中,根据项目业务需求考虑到数据量大、复杂,且需要承受巨大的访问量(在项目中使用关系型数据库RDBMS,MySQL)。一般情况下,如果采用传统的Master-Slave复制模式,此时的数据库服务器的压力承载量受限于Master数据库服务和其负载量。

所以,采用了分库分表方法,将其服务能力和负载量进行横向扩展,并且选择了 PartitionByPattern分表的策略(注:在进行分表时,根据自身业务需求选择合适的分表策略,将会大大提高分表的效果,当然,如果分表策略选择不当,可能会导致分表后的出现冷热数据的情况,达不到预期的效果,这个就需要Team-Leader来衡量了)。本文主要实现,在Linux系统中实现MySQL的分库分表,通过MyCat数据库中间件来实现!

前面对MyCat进行了详细的全方位的介绍,这儿就不再做详细的介绍了,可以点击下列连接翻阅查看,如下:

开源分布式数据库中间件MyCat架构简介(一)

开源分布式数据库中间件MyCat架构简介(二)

 

Linux+MySQL+MyCat实现读写分离,主从同步的解决方案

一、Linux下MySQL数据库服务的安装与部署

参考博主的另一篇文章进行《基于MySQL Yum存储库在Linux-7.2上安装MySQL-5.7.21数据库服务

 

二、下载Linux MyCat

CSDN 下载:【Linux MyCat+文档下载

官网下载:【MyCat官网下载

 

三、上传Linux服务器,并解压

Linux下输入指令:tar -zxvf

并移动到本地目录:mv mycat /usr/local/

[root@localhost software]# tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
[root@localhost software]# mv mycat /usr/local/ 

 

四、MyCat主要的配置文件概述

MyCat配置文件:/usr/local/mycat/conf

如下图:

说明:

配置文件说明

schema.xml

Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。

server.xml

server.xml几乎保存了所有mycat需要的系统配置信息。其在代码内直接的映射类为SystemConfig类。

rule.xml

rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标签。

 

描述:

将需要进行分片的表分别存储到三个数据节点上,这儿为了便于进行测试,准备三个MySQL数据库实例即可,这儿就创建几个测试库。

 

* 注意:如果是Linux版本的MySQL服务器,在配置MyCat分片之前,还需要配置MySQL的大小写,否则为存在找不到表的问题,在MySQL的配置文件 “vi /etc/my.cnf”中新增一行配置 “lower_case_table_names = 1”,如下:

 

五、创建据库实例

在本文章中,主要未来演示分库分表的效果,通过创建三个数据库实例来实现(三个实例中均没有数据表),在实际的项目部署过程中,一个数据库实例对应了一个实际的MySQL数据库服务。创建好后,如下图:

 

六、配置逻辑库

在 server.xml配置文件的末尾处配置一个MyCat的逻辑库名称,如果一个用户需要访问数据库中的数据,则直接通过该名称即可实现访问,如下图:

 

具体内容如下:


        <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">b2c_aiyou</property>
                <property name="defaultSchema">b2c_aiyou</property>
                <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

                <!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
        </user>

        <user name="user">
                <property name="password">user</property>
                <property name="schemas">b2c_aiyou</property>
                <property name="readOnly">true</property>
                <property name="defaultSchema">b2c_aiyou</property>
        </user>

 

七、配置数据库节点

在 schema.xml配置文件配置实际的数据库节点,数据库连接地址,用户名密码等。如下图:

具体内容如下:

        <schema name="b2c_aiyou" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
                <!-- auto sharding by id (long) -->
                <!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
                <table name="tb_item,tb_item_cat,tb_item_desc" dataNode="dn1,dn2,dn3" rule="b2c_auto_id" splitTableNames ="true"/>
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
                        /> -->
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="b2c_aiyou_data_host" database="b2c_aiyou_01" />
        <dataNode name="dn2" dataHost="b2c_aiyou_data_host" database="b2c_aiyou_02" />
        <dataNode name="dn3" dataHost="b2c_aiyou_data_host" database="b2c_aiyou_03" />
        <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
         <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
        <dataNode       name="jdbc_dn2" dataHost="jdbchost" database="db2" />
        <dataNode name="jdbc_dn3"       dataHost="jdbchost" database="db3" /> -->
        <dataHost name="b2c_aiyou_data_host" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.159.128:3306" user="root"
                                   password="Huazai12345!">
                </writeHost>
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>

 

八、配置分库分表的规则

在 rule.xml配置文件中,配置相关规则,如下图:

具体内容如下:

<mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="b2c_auto_id">
                <rule>
                        <columns>id</columns>
                        <algorithm>b2c_aiyou_item_id</algorithm>
                </rule>
        </tableRule>

定义的规则函数内容如下:

        <function name="b2c_aiyou_item_id"
                          class="io.mycat.route.function.PartitionByPattern">
                <property name="patternValue">3072</property>
                <property name="mapFile">b2c_aiyou_item_id.txt</property>
        </function>

 

如果需要配置其它规则,可以在源码包中找到,如下图:

下载地址:【Mycat 2-1.06 源码包CSDN下载

 

在当前目录下,也就是 MyCat的 conf目录下,新增 b2c_aiyou_item_id.txt规则定义文件,并且授权 “ chmod 777 b2c_aiyou_item_id.txt” 的最高权限,添加如下内容:

0-1023=0
1024-2047=1
2048-3072=2

 

九、测试分库分表八步走(天龙八步)

第一步,启动MyCat Server,进入 MyCat的bin目录下,输入指令 “ ./mycat start ”

当然,还有其它:

./mycat { console | start | stop | restart | status | dump }

 

第二步,连接到 MyCat Server,需要注意的是,MyCat的默认端口为8066,连通后如下图:

 

连接成功后,是没有任何数据表的,如下图:


第二部,在MyCat服务上,创建一个测试的数据表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_item
-- ----------------------------
DROP TABLE IF EXISTS `tb_item`;
CREATE TABLE `tb_item`  (
  `ID` int(11) NOT NULL,
  `NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 

第三步,向MyCat上的tb_item表插入数据(确保每个库中的tb_item表中一条数据,根据上面配置的rule规则范围来添加)

在Linux服务器上,直接通过指令连接到MyCat服务器,输入如下指令:

[root@localhost conf]# mysql -uroot -p123456 -h192.168.159.128 -P8066 -Db2c_aiyou

连接到MyCat服务器后,可以通过指令 “ show databases; ” 看到,在上面配置的schema.name 为 b2c_aiyou,如下图:

当然如果要查看方才创建的tb_item表,则可以通过指令 “ show tables; ” 查看咯,

 

第四步,向MyCat服务中的tb_item表插入三条数据,id的定义,可以根据配置rule.xml中的id分配规则,确保三个库中都有一条数据,方便更直观的查看MyCat分表是否成功咯,

insert into tb_item(id,name) values(1001,'huazai'); 
insert into tb_item(id,name) values(1598,'wangwu'); 
insert into tb_item(id,name) values(98291,'zhangsan'); 

 

第五步,查看MyCat服务上的tb_item表中数据是否插入成功,数据查询指令 “ select * from tb_item; ” ,如下图:

 

第六步,查看MySQL服务上的每个数据库中tb_item表中的数据,即b2c_aiyou_01~03.tb_item,

通过如下指令连接到MySQL数据库服务

[root@localhost conf]# mysql -uroot -pHuazai12345! -h192.168.159.128 -P3306

查看测试的数据库实例,如下图:

查看每个库下tb_item表中的数据,通过指令 “ select * from b2c_aiyou_01~03.tb_item; ”,如下图:

 

第七步,小技巧-》更快捷的查询方法,不用像查询输入查询指令那样,这么麻烦,通过Navicat工具来查询,一条查询语句,然后在数据库栏的下拉列表中选择相应的数据库,即可查询了,如下图:

 

第八步,收尾管理

庆祝自己,通过不懈的努力,终于一步一的,在Linux下通过MyCat数据库中间件实现了分库分表了,给自己点掌声!!!

 

 

 

 

参考文献:

MyCat官网:【MyCat官方网站

GitHub:【MyCATApache

Issues:【Mycat-Server-issues

MyCat指南:【MyCat指南CSDN


 好了,关于 Linux+MySQL+MyCat实现分库分表,通过MyCat数据库中间件实现分库分表配置实战 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:CSDN (Chinese Software Developer Network)
原        文:https://blog.csdn.net/Hello_World_QWP/article/details/105662439
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值