Mycat部署(单库分表)

       系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。其前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之。于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显。
       这篇文章主要是MyCAT的入门部署。

一、环境

  • JDK
    mycat运行时需要java开发环境
    安装可参考:centos7 通过yum安装JDK1.8

  • MYSQL
    Mycat是一个数据库中间件,并不具备数据存储的功能,可以简单理解为一个过渡服务。所以为实现数据的存储,需要部署物理数据库,以实现数据的存储。
    安装可参考:Centos7 Yum安装 MySQL 5.7

二、下载

  • Mycat官网:http://www.mycat.io
    可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。

  • Mycat下载地址: http://dl.mycat.io
    官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。

建议大家选择 1.6.5 版本,毕竟是比较稳定的版本,且 1.6.5 版本 才开始支持单库分表。

安装:
根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。)
版本说明

下载:
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
解压:
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

三、配置

解压后,修改相关配置。配置文件都放在 mycat/conf 下。

1. 修改 server.xml

mycat 代理数据库配置。
Mycat的配置文件,设置账号、参数等.

<!-- mycat的8066 端口连接的用户名,密码,逻辑数据库名 -->
<user name="zzti" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">mydb</property>
</user>

设置user name,password及schemas;
name和password在连接代理数据库Mycat时使用;
schemas是逻辑库,要和schema.xml里的 schema name 对应。

2.修改schema.xml

mycat逻辑数据库、表,到mysql物理数据库、表的映射关系。
Mycat对应的物理数据库和数据库表的配置.

<?xml version="1.0"?>                                                                                                    
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">                                                                              
<mycat:schema xmlns:mycat="http://io.mycat/">                                                                            
        <!-- name: 逻辑数据库名 -->                                                                                      
        <schema name="mydb" checkSQLschema="false" sqlMaxLimit="100">                                                    

                <!-- name: 表名,分表主键,子表,数据节点,分表规则 -->                                                  
                <table name="city" primaryKey="id" autoIncrement="true" subTables="city_$1-3" dataNode="dn1" rule="mod-long" />                                                                                                                   
        </schema>                                                                                                        
        <!-- database:物理数据库名 -->                                                                                   
        <dataNode name="dn1" dataHost="localhost1" database="mydb" />                                                    
        <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="localhost:3306" user="zzti" password="123456">                        
                        <!-- can have multi read hosts -->                                                               
                        <readHost host="hostS1" url="localhost:3306" user="zzti" password="123456" />               
                </writeHost>                                                                                             
        </dataHost>                                                                                                      
</mycat:schema> 

schema name 要和server.xml对应上,
user表设置分表3张 (city_1, city_2, city_3),只设置一个 datanote(即一个物理数据库服务)
rule采用取模模式mod-long。
writeHost 和 readHost设为同一数据库。

3.修改 rule.xml

Mycat分片(分库分表)规则.

<tableRule name="mod-long">
    <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>

此次选用默认的mod-long规则,只需修改count数.
修改property count 等于3(默认值即为3,如果你需要分出更多的表,在此进行修改为你的分表数)

这样,配置就已经完成了。

四、物理数据库构建

先在MySQL库上,建数据库mydb,并在此数据库中建4张表,citycity_1city_2city_3,且四张表结构相同。表中字段为id, country, name, state

CREATE TABLE `city` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `country` varchar(50),
  `name` varchar(50),
  `state` varchar(50),
  PRIMARY KEY (`id`)
);

五、启动Mycat

进入mycat/bin 目录

cd ../bin

启动:

./mycat start

查看启动状态:

./mycat status 

停止:

./mycat stop 

重启(改变上面的xml配置不用重启,管理端可以重新载入):

./mycat restart 
查看logs/下的wrapper.log和mycat.log可以查看运行时问题和异常。

mycat启动日志:

cat ./logs/wrapper.log

mycat 应用日志:

cat ./logs/mycat.log

六、测试

  • 连接mycat, 端口:8066,账号:zzti, 密码:123456
    使用你在 server.xml文件中配置的用户名和密码
  • 执行sql语句,查看执行过程。
 insert into city(id, country, name, state) VALUES (2, '中国', '长沙','湖南')
  • 查询表中数据,数据显示正常。
    在这里插入图片描述
    再打开mysql中的mydb数据库 city_3 表(物理表)可看到数据:
    在这里插入图片描述

青冥有晓月

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值