zoukankan      html  css  js  c++  java
  • mycat分库分表

    一、目标

    我们准备建立两个数据库:test、test2。

    test包含两张表:1)t_user; 2) t_class

    test2包含一张表:2)t_user

    如上,我们打算把t_user的数据均匀的分布到test和test2两个数据库里面,而t_class的数据仅分布到test一个数据库里面;

    二、准备

    1、数据库

    1)创建mysql数据库: test

      1)建表t_user

    CREATE TABLE `t_user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

      2) 建表t_class

    CREATE TABLE `t_class` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  

    2) 创建mysql数据库:test2

      1)建表 t_user

    CREATE TABLE `t_user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

    2、中间件mycat

    mycat安装参考:http://www.cnblogs.com/lay2017/p/9030042.html 

    三、配置server.xml

    设置如下:

    用户:root

    密码:root

    逻辑库名称:mycatdb

    <!-- mycat测试数据库 -->
        <user name="root">
            <property name="password">root</property>
            <property name="schemas">mycatdb</property>
            <property name="readOnly">false</property>
        </user>

    四、配置schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
        <!-- 配置逻辑库 -->
        <schema name="mycatdb" checkSQLschema="true" sqlMaxLimit="100">
            <!-- t_user表分到两个节点上 -->
            <table name="t_user" primaryKey="id" autoIncrement="true" dataNode="dataNode2,dataNode1"  rule="mod-long"/>
            <!-- t_class表分到一个节点上 -->
            <table name="t_class" primaryKey="id" dataNode="dataNode1"/>
        </schema>
    
        <!-- 配置分片节点 -->
        <dataNode name="dataNode1" dataHost="dataHost1" database="test" />
        <dataNode name="dataNode2" dataHost="dataHost1" database="test2" />
    
        <!-- 配置节点主机 -->
        <dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
            <!-- 心跳 -->
            <heartbeat>select user()</heartbeat>
            <!-- 读写配置 -->
            <writeHost host="host1" url="数据库所在IP地址:3306" user="账户" password="密码"></writeHost>
        </dataHost>
    
    </mycat:schema>

    如上:

    1)checkSQLschema设置为true:表示不检查库名,否则如navicat中无法打开表查看数据;

    2)t_user表分配了两个节点,分片规则为mod-long。这里需要到rule.xml里面配置分片规则

    找到rule.xml并打开,更改mod-long规则的function的count为2(因为t_user分到了两个节点):

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

    这样,t_user的数据就会均匀分布到两个数据库

    3)primaryKey="id" autoIncrement="true" 表示主键采用序列自增(如果不配置autoIncrement那么将采用数据库自增)

    4)注意:如果不在schema里面设置的table那么在navicat中是不显示的,但是功能可以正常使用;

    五、启动

    配置完毕,我们可以启动mycat,进入mycat的bin目录,执行

    ./mycat start

    启动是否成功我们可以查看wrapper.log日志,如果有问题会有报错信息(mycat.log可以查看mycat使用过程中出现的异常)

    注意:如果报错是mysql连接不上,请查看是否mysql允许了远程连接

    六、查看mycat数据源

    如上,我们配置好了分库以及分表,我们可以查看一下数据源的信息,如下命令:

    ./mysql -uroot -proot -P9066 -h127.0.0.1
    mysql> show @@datasource

    我们看到:

    +-----------+-------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

    | DATANODE  | NAME  | TYPE  | HOST          | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |

    +-----------+-------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

    | dataNode1 | host1 | mysql | 服务器IP地址 | 3306 | W    |      0 |   10 | 1000 |      65 |        29 |          0 |

    | dataNode2 | host1 | mysql | 服务器IP地址 | 3306 | W    |      0 |   10 | 1000 |      65 |        29 |          0 |

    +-----------+-------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

     

    mycat中包含了两个节点,分别对应到我们配置的两个数据库实例

    七、navicat连接

    我们可以像一般数据库连接一样用navicat连接

    IP:即mycat安装的地址

    端口:8066

    用户名:user的name

    密码:user的password的值

    之后,我们便可以按照单实例的数据库一样测试了

     

  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/lay2017/p/9030709.html
Copyright © 2011-2022 走看看