从零搭建:使用Mycat进行切割数据库

一:参考博文:

【Mycat】数据库性能提升利器(二)——Mycat数据切分
Mycat安装与配置详解
Mycat安装与配置文件

二:Mycat水平切割数据库

安装所需工具

1.下载并安装linux

镜像下载地址,本人使用VM15进行部署,如果出现VMware Workstation 与 Device/Credential Guard 不兼容这种情况,请参考本人的博文:Vmware workstation与Hyper-v不兼容的解决方法

2.安装jdk1.8

下载jdk-8u221-linux-x64.tar.gz然后使用xshell上传至服务器中tar zxvf jdk-8u221-linux-x64.tar.gz 进行解压,vi /etc/profile 打开配置文件进行配置:

export JAVA_HOME=/usr/java/jdk1.8.0_152
 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 
export PATH=$PATH:$JAVA_HOME/bin

注意第一行要改成自己解压的实际路径,保存之后执行 source /etc/profile
然后执行,java -version出现如下则安装成功
在这里插入图片描述

3.安装mysql

执行 yum list installed | grep mariadb ,查看是否安装了 mariadb,出现下图则已安装:在这里插入图片描述
执行 yum -y remove mariadb* 将之卸载; 执行 yum install wget 安装wget ;
下载rpm包:wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
进行安装:rpm -ivh mysql57-community-release-el7-11.noarch.rpm;检查是否安装成功:

yum repolist enabled | grep "mysql.*-community.*" ;出现下图则安装成功:
在这里插入图片描述
安装mysql:yum install mysql-server;启动mysql:systemctl start mysqld.service;查看初始密码:grep 'temporary password' /var/log/mysqld.log在这里插入图片描述

执行:mysql -u root -p,填入初始密码;修改密码策略,降低所需密码复杂度:set global validate_password_policy=0;; 重置密码 set password=password("111aaa+++"); flush privileges; 授权远程登陆:grant all privileges on *.* to 'root'@'%' identified by '111aaa+++' with grant option; flush privileges; 关闭防火墙:systemctl stop firewalld.service 禁止防火墙开机自启:systemctl disable firewalld.service

本人将当前虚拟机起名为 vm1-192.168.5.129,使用vm创建克隆虚拟机vm2-192.168.5.133vm3-192.168.5.134,本人使用的是创建克隆链接这样更省资源,vm1创建数据库db1和db3,vm2创建db2,vm3将用来安装Mycat
在这里插入图片描述

4.安装Mycat

下载mycat,上传到服务器,解压:tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

配置Mycat

mycat的配置文件都在conf目录下,进入开始配置
在这里插入图片描述

1.配置wrapper.conf

vim wrapper.conf 将该行配置成你自己的java文件目录
在这里插入图片描述

2.配置schema.xml

vim schema.xml,将下面的配置直接覆盖原来的配置,注意配置好两个节点的url,密码,和user

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!--配置逻辑表:指明是否分表,分成几个表-->
        <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
                <!-- 对tb_item表进行分表,分片规则为,auto-sharding-long根据id范围 -->
                <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        </schema>
        <!--配置分片节点:指明要分库的节点主机-->
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost2" database="db2" />
    <dataNode name="dn3" dataHost="localhost1" database="db3" />
     <!--配置节点主机1:指明连接情况,主机地址-->
     <dataHost name="localhost1" 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.5.129:3306" user="root"
                   password="111aaa+++">
            <!-- can have multi read hosts -->
        </writeHost>
    </dataHost>

    <!--配置节点主机2:指明连接情况,主机地址-->
    <dataHost name="localhost2" 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.5.133:3306" user="root"
                                   password="111aaa+++">
                        <!-- can have multi read hosts -->
                </writeHost>
    </dataHost>

</mycat:schema>

3.server.xml

vim server.xml, 此配置文件几乎保存了所有mycat需要的系统配置信息。在这里配置有mycat的用户名和密码,其中值得注意的是firewall标签的配置,后两个配置的ip指的是虚拟机登陆时所显示的ip,配置好后,nacivat和虚拟机本地都能够登陆mycat,若连接时出现host拦截再自行配置
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

                <property name="sequnceHandlerType">2</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-->
                <property name="processorBufferPoolType">0</property>
                <!--默认是65535 64K 用于sql解析时最大文本长度 -->
                <!--<property name="maxStringLiteralLength">65535</property>-->
                <!--<property name="sequnceHandlerType">0</property>-->
                <!--<property name="backSocketNoDelay">1</property>-->
                <!--<property name="frontSocketNoDelay">1</property>-->
                <!--<property name="processorExecutor">16</property>-->
                <!--
                                             <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
                        <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
                        <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
                <property name="handleDistributedTransactions">0</property>

                        <!--
                                                     off heap for merge/order/group/limit      1开启   0关闭
                -->
                <property name="useOffHeapForMerge">1</property>

                <!--
                                             单位为m
                -->
                <property name="memoryPageSize">1m</property>

                <!--
                                             单位为k
                -->
                <property name="spillsFileBufferSize">1k</property>

                <property name="useStreamOutput">0</property>

                <!--
                                             单位为m
                -->
                <property name="systemReserveMemorySize">384m</property>


                <!--是否采用zookeeper协调切换  -->
                <property name="useZKSwitch">true</property>


        </system>

        <firewall>
                <whitehost>
                        <host host="127.0.0.1" user="root"/>
                        <host host="127.0.0.1" user="user"/>
                        <host host="192.168.5.1" user="user"/>
                        <host host="192.168.5.1" user="root"/>
                </whitehost>
                <blacklist check="true">
                </blacklist>
        </firewall>

      <user name="root">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>

                <!-- 表级 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">TESTDB</property>
                <property name="readOnly">false</property>
        </user>

</mycat:server>

复制和粘贴xml文件有可能会复制不完整,或xml格式不正确,会导致Mycat启动报错,可使用XML验证器,此外还有定义分片规则的rule.xml,在此并不需要修改

测试

1.运行并连接mycat

  • bin目录下运行mycat:sudo ./mycat console,最后打印如下则启动成功

在这里插入图片描述

  • 成功后也可使用 sudo ./mycat start进行后台运行,用sudo ./mycat restart重启,sudo ./mycat status查看运行状态,sudo ./mycat stop停止服务。 启动成功后:mysql -uuser -puser -P9066 -h127.0.0.1 可进行本地登陆,也可navicat连接,如下所示,其中用户名和密码就是在server.xml中所配置的

在这里插入图片描述
在这里插入图片描述

2.插入数据进行分片

  • 向db1,db2和db3中创建tb_item表,表明务必要与schema.xml中配置的一致

在这里插入图片描述

  • 以上三个数据库中创建完表之后,会发现mycat中就会自动创建该表

在这里插入图片描述

  • 用mycat插入数据如下
    在这里插入图片描述
  • 插入完后发现id小于500万时存放在db1中,大于500万小于1000万的时候储存在db2中,大于1000万小于1500万则储存在db3中,而大于1500万则会因未定义而报错
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值