zoukankan      html  css  js  c++  java
  • Mycat安装及测试分片总结

    1.安装jdk1.7
    2.连接实际mysql数据库
    用命令行工具或图形化客户端,连接mysql,创建DEMO所用三个分片数据库;(默认schema.xml中的配置需要三个库)
    CREATE database db1;
    CREATE database db2;
    CREATE database db3;
    4.解压Mycat-server-1.X.X.X-20150105144205-Linux.tar.gz 到/usr/local/mycat
    4.修改 mycat配置文件
    server.xml:这里配置客户端连接mycat 使用的用户名和密码,以及配置用户对应的数据库(逻辑库,虚拟)
    下面是默认配置(可不用修改):
    <user name="root">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
    </user>

    schema.xml:由于采用一个mysql,所以配一个写和一个读(同一个)
    <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:3307" user="root"
    password="123456">
    <!-- can have multi read hosts -->
    <readHost host="hostS2" url="localhost:3307" user="root" password="123456" />
    </writeHost>
    <!--<writeHost host="hostS1" url="localhost:3316" user="root"
    password="123456" />-->
    <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
    </dataHost>

    5.进入 /usr/local/mycat/bin (默认数据端口为8066,管理端口为9066)
    执行./mycat start

    显示: Starting Mycat-server...

    6. 进入logs目录,查看日志,如果wrapper.log 报错 java.NET.BindException: Address already in use 杀掉正在执行的相关java进程
    ps -ef|grep java
    kill -9 xxx

    7.使用客户端连接mycat
    端口8066,用户名root,密码123456
    成功后可以看到 schema.xml中配置的逻辑表 如 employee等(假象)
    查询表时会报错

    7.确认:db1、db2、db3中没有表 employee

    8.使用客户端连接mycat,通过mycat创建表
    create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

    然后查看 db1 和 db2 发现都已经创建了表 employee,几乎同时创建。由于employee表没有配置到db3中,所以db3中没有employee表
    9.插入数据
    insert into employee(id,name,sharding_id) values(1,'leader us',10000);

    然后分去db1 和 db2数据库中查询 ,发现db1中的empoyee表有数据插入,但是db2中没有。分片原因
    10.直接连接 db2
    插入数据
    insert into employee(id,name,sharding_id) values(2,'zhanghui',10010);

    db2数据库中新增一条数据:分片原因
    11.通过mycat查询
    select * from employee
    返回两条数据


    12.分片测试:
    根据规则sharding-by-intfile(分片枚举)进行分片测试

    employee逻辑表定义
    <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
    rule="sharding-by-intfile" />

    可以在rule.xml中找到 sharding-by-intfile 的定义
    <tableRule name="sharding-by-intfile">
    <rule>
    <columns>sharding_id</columns>
    <algorithm>hash-int</algorithm>
    </rule>
    </tableRule>

    hash-int算法:
    <function name="hash-int"
    class="io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
    </function>

    partition-hash-int.txt根据这个文件进行分片

    在mycat安装目录 conf目录下能够找到这个 txt文件,里面的内容如下:
    10000=0
    10010=1

    相当于 值为10000的数据 写入0 分片;10010写入1分片。 0 和1 代表分片序号。

    步骤9 和10 的操作验证了这个分片规则,这里不重复

    13.全局表测试:
    <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
    注意 company表是 全局表,会冗余存在个分区。

    在mycat 客户端执行:

    create table company(id int not null primary key,name varchar(100));

    执行完后 db1 db2 db3 中都创建了company表

    插入数据:
    insert into company(id,name) values(1,'hp');

    执行完成后,db1 db2 db2中都 写入了这条数据


  • 相关阅读:
    关系数据库设计一般方法 范式及完整性
    left join, right join , inner join, join, union的意义
    mysql 事务类型表的用法
    Java中静态变量与非静态变量的区别
    JSP生命周期
    Java&Tomcat环境变量配置
    JSP两种声明变量的区别
    一个web页面的访问的过程
    Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 解决
    IDEA:修改JAVA文件自动引入import.*包
  • 原文地址:https://www.cnblogs.com/hutuchong/p/7280477.html
Copyright © 2011-2022 走看看