zoukankan      html  css  js  c++  java
  • mycat 单库多表实现水平分片

    环境

    mycat : 192.168.126.128         root    root
    mysql1: 192.168.126.129:3306    root    lizhenghua
    mysql2: 192.168.126.131:3306    root    lizhenghua
    
    database:   zwrdb
    table1  :   role
    table2  :   subject_t
    table3  :   suggest
    table4  :   cas_user
    

    版本说明

    mycat-server-1.6.6.1
    mysql-5.7.22
    

    mycat下载链接

    mycat部署

    1.包的部署

    tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
    
    vim /etc/profile
    #mycat
    export MYCAT_HOME=/usr/local/mycat
    export PATH=$PATH:$MYCAT_HOME/bin
    
    source /etc/profile

    2.JDK的部署

    #*************************************************************************
    #         > File Name: jdk.sh
    #         > Author: chenglee
    #         > Main : chengkenlee@sina.com
    #         > Blog : http://www.cnblogs.com/chenglee/
    #         > Created Time : 2019年03月07日 星期四 18时08分59秒
    #*************************************************************************
    #!/bin/bash
    jdk_path="/usr/local"
    jdk_targ=`basename *jdk-*`
    
    function Cheng_flash(){
        i=0;
        str=""
        arr=("|" "/" "-" "\")
        while [ $i -le 100 ]
        do
        let index=i%4
        let indexcolor=i%8
        let color=30+indexcolor
        printf "e[0;$color;1m[%-100s][%d%%]%c
    " "$str" "$i" "${arr[$index]}"
        sleep ${sleeptime2}
        let i++
        str+='='
        done
        printf "
    "
    }
    function Time_test(){
        echo "please wait a moment ... "
        starttime=`date +'%Y-%m-%d %H:%M:%S'`
        tar tvvf ${jdk_targ} > /dev/null
        endtime=`date +'%Y-%m-%d %H:%M:%S'`
        start_seconds=$(date --date="$starttime" +%s);
        end_seconds=$(date --date="$endtime" +%s);
        sleeptime=$((end_seconds-start_seconds))
        sleeptime2=`awk 'BEGIN{printf "%0.2f",'${sleeptime}'/100}'`
    }
    function tar_gz(){
        Time_test
        tar xvvf ${jdk_targ} -C ${jdk_path} > /dev/null | Cheng_flash
    }
    function profile(){
        jdk_Path=`find ${jdk_path} -maxdepth 1 | grep jdk`
    (
    cat <<EOF
    #java jdk
    export JAVA_HOME=${jdk_Path}
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    EOF
    ) >> /etc/profile
    }
    function Source(){
        source /etc/profile
    }
    
    function main(){
        tar_gz
        profile
        Source
    }
    main
    

    注: 把此脚本扔在与JDK二进制包同一目录, 运行此脚本即可,这是我常用的shell

    mysql方面

    注:忽略mysql的部署步骤, 直接跳到启动mysql.

    [root@localhost mysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
    192.168.126.129
    root       7139  0.0  0.1 113520  1752 pts/0    S    09:50   0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
    mysql      7307  0.1 14.6 1141352 194172 pts/0  Sl   09:50   0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock
    
    
    [root@localhostmysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
    192.168.126.131
    root       7367  0.0  0.1 113312  1628 pts/0    S    09:50   0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
    mysql      7531  0.0 13.5 1141332 192852 pts/0  Sl   09:50   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock
    

    mycat配置

    schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
        <!-- 本配置文件应对双机单库多表**水平分片**-->
        <!-- 数据库配置  -->
        <schema name="zwrdb" checkSQLschema="false" sqlMaxLimit="100">
            <table name="role"  dataNode="dn1" />
            <table name="subject_t"  dataNode="dn1" />
            <table name="suggest"  dataNode="dn1" />
            <table name="cas_user" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2"
                   rule="mod-long" />
        </schema>
        <!-- 分片配置  -->
        <dataNode name="dn1" dataHost="test1" database="zwrdb" />
        <dataNode name="dn2" dataHost="test2" database="zwrdb" />
    
        <!-- 分表分库 start-->
        <!-- 物理数据库配置  test1模块-->
        <dataHost name="test1" maxCon="1000" minCon="10" balance="0"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user();</heartbeat>
            <writeHost host="hostM1" url="192.168.126.129:3306" user="root"
                       password="lizhenghua">
            </writeHost>
        </dataHost>
        <!-- 物理数据库配置  test2模块-->
        <dataHost name="test2" maxCon="1000" minCon="10" balance="0"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user();</heartbeat>
            <writeHost host="hostS1" url="192.168.126.131:3306" user="root"
                       password="lizhenghua">
            </writeHost>
        </dataHost>
        <!-- 分表分库 end-->
    </mycat:schema>

    注:

    数据库模块配置说明: 库设置为zwrdb, 在这个库里面的表就是前面三个表都写入了dn1这块片节点, 而cas_user分到了dn1和dn2两个片节点, 分片规则是mod-long

    分片配置说明:就是dn1和dn2, 它们分别指定的各自的dataHost与共同的database

    物理数据库配置说明:根据两个不通的dataHost指定两台mysql的登录方式

    rule.xml

    注:修改有关mod-long分片规则属性, 它默认是3块分片, 而我这里只设置了2个dataNode

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>
    

    server.xml

    注:修改最后的参数,就是配置mycat的连接账号密码与库

    	<user name="root" defaultAccount="true">
    		<property name="password">root</property>
    		<property name="schemas">zwrdb</property>
    	    <property name="readOnly">false</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>
    

    注:这里我把mycat的连接账号和密码都是root

    启动

    mycat start
    

    日志

    wrapper.log

    STATUS | wrapper  | 2019/04/04 09:56:49 | --> Wrapper Started as Daemon
    STATUS | wrapper  | 2019/04/04 09:56:49 | Launching a JVM...
    INFO   | jvm 1    | 2019/04/04 09:56:50 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
    INFO   | jvm 1    | 2019/04/04 09:56:52 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
    INFO   | jvm 1    | 2019/04/04 09:56:52 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
    INFO   | jvm 1    | 2019/04/04 09:56:52 |
    INFO   | jvm 1    | 2019/04/04 09:56:55 | MyCAT Server startup successfully. see logs in logs/mycat.log

    启动成功,分片分表日志写进mycat.log

    端口说明

    [root@localhost logs]# netstat -tlnp | grep java
    tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      7466/java
    tcp6       0      0 :::9066                 :::*                    LISTEN      7466/java
    tcp6       0      0 :::37972                :::*                    LISTEN      7466/java
    tcp6       0      0 :::1984                 :::*                    LISTEN      7466/java
    tcp6       0      0 :::8066                 :::*                    LISTEN      7466/java
    tcp6       0      0 :::46694                :::*                    LISTEN      7466/java

    注:8066为mycat数据连接端口, 9066为mycat管理端口

    连接说明

    mysql -u root -proot -h 192.168.126.128 -P 8066
    

    展示

    mysql> show databases;
    +----------+
    | DATABASE |
    +----------+
    | zwrdb    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> use zwrdb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +-----------------+
    | Tables in zwrdb |
    +-----------------+
    | role            |
    | subject_t       |
    | suggest         |
    | cas_user        |
    +-----------------+
    4 rows in set (0.01 sec)
    
    mysql>

    管理命令说明

    mysql -u root -proot -h 192.168.126.128 -P 9066

     1.节点查询

    mysql> show @@dataNode where schema=zwrdb;
    +------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
    | NAME | DATHOST     | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
    +------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
    | dn1  | test1/zwrdb|     0 | mysql |      0 |   10 | 1000 |     380 |          0 |        0 |       0 |            -1 |
    | dn2  | test2/zwrdb|     0 | mysql |      0 |   10 | 1000 |     380 |          0 |        0 |       0 |            -1 |
    +------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
    2 rows in set (0.10 sec)

    注:DATAHOST:表示对应的datahost属性的值,即数据主机,ACTIVE:表示活跃的连接数量,IDLE:表示空闲的连接数量。SIZE:表示对应的总连接数量

    2.心跳

    mysql> show @@heartbeat;
    +--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
    | NAME   | TYPE  | HOST            | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
    +--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
    | hostM1 | mysql | 192.168.126.129 | 3306 |       1 |     0 | idle   |   30000 | 33,5,5       | 2019-04-04 11:00:35 | false |
    | hostS1 | mysql | 192.168.126.131 | 3306 |       1 |     0 | idle   |   30000 | 31,4,4       | 2019-04-04 11:00:35 | false |
    +--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
    2 rows in set (0.01 sec)

    注:RS_CODE状态如下:
      OK_STATUS=1代表正常状态。
      ERROR_STATUS =-1 代表连接错误
      TIMEOUT_STATUS=-2代表连接超时
      INIT_STATUS=0代表初始化状态
    若节点发生故障,则会连续进行默认的5个周期检测,心跳连接失败后就会变成-1,节点故障确认,然后可能发生切换。

    3.版本

    mysql> show @@version;
    +---------------------------------------------+
    | VERSION                                     |
    +---------------------------------------------+
    | 5.6.29-mycat-1.6.6.1-release-20181031195535 |
    +---------------------------------------------+
    1 row in set (0.01 sec)
    

    4.当前连接状态

    mysql> show @@connection;
    +------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
    | PROCESSOR  | ID   | HOST      | PORT | LOCAL_PORT | USER | SCHEMA | CHARSET | NET_IN | NET_OUT | ALIVE_TIME(S) | RECV_BUFFER | SEND_QUEUE | txlevel | autocommit |
    +------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
    | Processor0 |    1 | 127.0.0.1 | 9066 |      46274 | root | NULL   | utf8:33 |    321 |    2635 |           422 |        4096 |          0 |     |            |
    +------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
    1 row in set (0.00 sec)
    

    5.后端连接状态

    mysql> show @@backend;
    +------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
    | processor  | id   | mysqlId | host            | port | l_port | net_in | net_out | life | closed | borrowed | SEND_QUEUE | schema | charset  | txlevel | autocommit |
    +------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
    | Processor0 |    1 |       2 | 192.168.126.129 | 3306 |  58962 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    2 |       4 | 192.168.126.129 | 3306 |  58968 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    3 |       8 | 192.168.126.129 | 3306 |  58970 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    4 |       5 | 192.168.126.129 | 3306 |  58964 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    5 |       3 | 192.168.126.129 | 3306 |  58966 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    6 |       9 | 192.168.126.129 | 3306 |  58972 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    7 |       6 | 192.168.126.129 | 3306 |  58976 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    8 |      10 | 192.168.126.129 | 3306 |  58980 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |    9 |       7 | 192.168.126.129 | 3306 |  58978 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   10 |      11 | 192.168.126.129 | 3306 |  58974 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   11 |       2 | 192.168.126.131 | 3306 |  52040 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   12 |       5 | 192.168.126.131 | 3306 |  52046 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   13 |       9 | 192.168.126.131 | 3306 |  52054 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   14 |       8 | 192.168.126.131 | 3306 |  52052 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   15 |       4 | 192.168.126.131 | 3306 |  52044 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   16 |      10 | 192.168.126.131 | 3306 |  52056 |   3369 |     847 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   17 |      11 | 192.168.126.131 | 3306 |  52048 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   18 |       3 | 192.168.126.131 | 3306 |  52042 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   19 |       6 | 192.168.126.131 | 3306 |  52038 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    | Processor0 |   20 |       7 | 192.168.126.131 | 3306 |  52050 |   3449 |     866 | 4158 | false  | false    |          0 | zwrdb  | latin1:5 | 3       | true       |
    +------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
    20 rows in set (0.00 sec)
    

    6.缓存信息

    mysql> show @@cache;
    +-------------------------------------+-------+------+--------+------+------+-------------+----------+
    | CACHE                               | MAX   | CUR  | ACCESS | HIT  | PUT  | LAST_ACCESS | LAST_PUT |
    +-------------------------------------+-------+------+--------+------+------+-------------+----------+
    | ER_SQL2PARENTID                     |  1000 |    0 |      0 |    0 |    0 |           0 |        0 |
    | SQLRouteCache                       | 10000 |    0 |      0 |    0 |    0 |           0 |        0 |
    | TableID2DataNodeCache.TESTDB_ORDERS | 50000 |    0 |      0 |    0 |    0 |           0 |        0 |
    +-------------------------------------+-------+------+--------+------+------+-------------+----------+
    3 rows in set (0.02 sec)
    

    注:SQLRouteCache: SQL语句路由缓存,TableID2DateNodeCache:缓存表主键与分片对应关系,ER_SQL2PARENTID:缓存ER分片中子表与父表对应关系。

    7.数据源状态

    mysql> show @@datasource;
    +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
    | DATANODE | NAME   | TYPE  | HOST            | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
    +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
    | dn1      | hostM1 | mysql | 192.168.126.129 | 3306 | W    |      0 |   10 | 1000 |     443 |         0 |          0 |
    | dn2      | hostS1 | mysql | 192.168.126.131 | 3306 | W    |      0 |   10 | 1000 |     443 |         0 |          0 |
    +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
    2 rows in set (0.00 sec)
    

      

  • 相关阅读:
    python Asyncore.dispatcher 理解
    COCOA® PROGRAMMING FOR MAC® OS X (2)- Speak Line
    COCOA® PROGRAMMING FOR MAC® OS X (1)- Get Start
    Objetive-C initialize研究
    Objetive-C +load方法研究
    Python创建多进程,用Queue传递信息
    Python 中的GIL
    IOS CrackMe 破解学习
    越狱手机发送短信
    Vue 子组件向父组件传参
  • 原文地址:https://www.cnblogs.com/chenglee/p/10653626.html
Copyright © 2011-2022 走看看