Mycat单库分表

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。

1.下载

目前只有1.6.5版本支持单库分表。

下载Mycat 1.6.5

wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20171029183033-linux.tar.gz 

解压后,修改配置文件,在 mycat/conf

2. 修改 server.xml

mycat 代理数据库配置。

Mycat的配置文件,设置账号、参数等.

<!-- mycat的8066 端口连接的用户名,密码,逻辑数据库名 -->
<user name="sino" 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="192.168.234.97:3306" user="sino" password="123456">                        
                        <!-- can have multi read hosts -->                                                               
                        <readHost host="hostS1" url="192.168.234.97:3306" user="sino" password="123456" />               
                </writeHost>                                                                                             
        </dataHost>                                                                                                      
</mycat:schema> 

schema name要和server.xml对应上,

user表设置分表十张,只能设置一个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。

这样,配置已经完成。

修改MySQL数据库

先在MySQL库上,建3张表,city1-3。

启动Mycat

启动:

./mycat start

查看启动状态:

./mycat status 

停止:

./mycat stop 

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

./mycat restart 

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

mycat启动日志:

cat ./logs/wrapper.log

mycat 应用日志:

cat ./logs/mycat.log

测试

  1. mysql创建mydb数据库,city_1, city_2, city_3 三张表。
  2. 连接mycat, 端口:8066,账号:sino, 密码:123456
  3. 执行sql语句,查看执行过程。
EXPLAIN 
insert into city(id, country, name, state) VALUES (2, '中国', '长沙','湖南')

可查看执行过程路由到物理表 city_3 表上:

这里写图片描述

打开mysql中的mydb数据库 city_3 表可看到数据:

这里写图片描述

错误

运行tomcat时提示以下错误:

代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: server1: server1: nodename nor servname provided, or not known

解决办法:

vim /etc/hosts 

127.0.0.1       localhost

改成

127.0.0.1       localhost server1

猜你喜欢

转载自blog.csdn.net/jeikerxiao/article/details/81107105