mycat的分库分表


1、什么是分库分表

2、分库分表的大致分配

3、Linux下配置mycat服务器


1、什么是分库分表?

  在同一个系统(项目)中,把一张数据比较多的表拆分到不同的集群节点上,

  这种模式叫做分库分表

2、分库分表的实现:

  使用mycat实现分库分表(HDFS:namenode datanode secondarynamdenode)

  在整个mycat中也会用到namenode和datanode

  (1)先配置一台mycat服务器(192.168.23.164)

  (2)然后配置两台mysql服务器:mysql01(192.168.23.129)和mysql02(192.168.23.130)

    在mysql01服务器下有一个teach数据库,在teach下有一个student表

    在mysql02服务器下有一个teach数据库,在teach下有一个student表

  当使用mycat把进行存储是,数据会自动往mysql01或mysql02中存储.

3、配置mycat

  3.1 规定Linux的用户名和全名不能叫mycat,否则mycat不会生效(原因是影响了Linux系统的环境变量)

  3.2 vim /etc/sysconfig/network也不能叫mycat

  3.3 mycat使用的是Java语言编写-->所以必须要在Linux上配置jdk

     (要求jdk是64位,因为mycat是在64位的jdk8 上进行编译的)

  3.4 配置jdk

  3.5 使用xftp把mycat的压缩包上传到Linux服务器上(/home/apps/)

  3.6 解压mycat压缩包

    tar -zxvf xxxx

  3.7 配置mycat的环境变量(与jdk的环境变量配置一样)

  3.8 启动mycat(两种方式)

    (1)进入mycat的bin目录: ./mycat console(推荐使用)

    或者在其他的地方的目录:mycat console

    (2)./mycat start

    一旦启动mycat就关不掉,kill -9 进程号  也关不掉,除非重启或者关机,

    据说可以使用Ctrl+C

  3.9 下面就是三个核心配置文件了(最重要的地方):

    所有的读写分离/分库分表都必须要在这三个配置文件完成

    在mycat的conf目录下:

      server.xml:配置了mycat的用户

      rule.xml:mycat的规则

      schema.xml:实现了读写分离和分库分表的具体配置

 server:

<?xml version="1.0" encoding="UTF-8"?>




0
1
0
0

2


(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+
false





0








0


0


64k


1k

0


384m



false







false

true
















123456
TEACH

rule.xml:

<?xml version="1.0" encoding="UTF-8"?>








id
mod-long






2


schema.xml

<?xml version="1.0"?>














writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

password="root" />


writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
select user()
password="root" />


配置完成:

进入到Navicat中,先新建连接,分别连接mysql01和mysql02,然后分别在mysql01和mysql02

  中分别建立两个数据库(库名可以不一致),再分别建立mycat_student表,

  然后建立mycat01的连接,(在建立连接时,端口号为8066,即通讯端口号,不能使用9066,为管理端口号)

在mycat01中会有一个TEACH数据库,在库中有一个mycat_student表,

  这是在配置文件中的配置生效了。

至此,配置结束。使用Java代码进行实现:只需要修改数据源就行了(只用连接mycat01数据库)

当进行存储的时候,由于我们使用的是轮询规则,数据会自动轮流存储到mysql01和mysql02.