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的值

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

     

  • 相关阅读:
    大数据
    优化
    gnu
    sed
    hadoop部署
    安装 zookeeper
    ansible
    ssh 配置无密码登录
    未完待续
    解正向代理、反向代理、透明代理
  • 原文地址:https://www.cnblogs.com/lay2017/p/9030709.html
Copyright © 2011-2022 走看看