1.分库分表(解决单表数据量过大的问题)java
2.独写分离(解决单个数据库访问量大,压力大的问题)mysql
将一个数据量大的表数据分放在不一样的数据节点上,这种模式就称为分库分表。linux
在分库分表中,全部的数据节点都是平等的,没有主从关系。redis
需求:使用两个mysql服务器,经过mycat添加数据,实现一条数据在mysql01,一条数据在mysql02上sql
使用规则:mod-long数据库
mycat是使用java编写的,所以须要先配置jdk环境,在安装mycatvim
1.官网下载mycatxxx.tar.gz服务器
2.xftp上传到linux中的apps目录中oracle
3.解压压缩包app
tar -zxvf Mycatxxx.tar.gz
4.配置环境变量(与配置jdk环境变量相同)
vim /etc/profile #编辑mycat环境变量 export MYCAT_HOME=/home/apps/mycat export PATH=$PATH:$MYCAT_HOME/bin
至此,mycat安装完成。可是要使用mycat的分库分表还须要配置几个文件:
进入mycat目录下的conf目录:
1.修改server.xml文件:
2.修改schemas.xml文件:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!-- schema:至关于mysql中的数据库 name:这个数据库的名字 checkSQLschema:检查sql语句是否错误,默认为false,不须要为true,交给mysql来检查就能够了 sqlMaxLimit:最大执行sql语句数量,能够一次性执行的sql语句数量 --> <schema name="TEACH" checkSQLschema="false" sqlMaxLimit="100"> <!-- 至关于数据库中的表,这个表并非真实存在的,而是经过mysql映射过来的,所以mysql中必定要存在与这个表的名字相同的表,这样才能映射进来 dataNode:数据节点,上一篇分析HDFS时,已经讲过数据节点的概念,就是mysql数据库,节点之间以,分隔 rule:规则,使用mycat实现分库分表有十大规则,也就是说怎样实现分片,是把天天的数据都分一个片,仍是按照编号范围,每100条数据分一块... 等等,具体十大分片规则,能够单独去看,这里使用mod-long,轮询的方式,第一条存mysql1,第2条存mysql2 --> <table name="student" dataNode="dn1,dn2" rule="mod-long" /> </schema> <!--数据节点:就是数据库服务器节点 name:节点的名字,与上面相对应,上面有几个,下面就要有几个 dataHost:数据节点地址,与下面的dataHost标签的名字向对应 database:真实的数据库名, mycat中的TEACH数据库是虚拟的,它里面的表都是经过真实的数据库中的表映射进来的,这里指的是mysql中的真实的数据库 --> <dataNode name="dn1" dataHost="localhost1" database="teach" /> <dataNode name="dn2" dataHost="localhost2" database="teach" /> <!--dataHost:真实的数据库的节点地址信息 name:给该节点起名字,经过dataNode引用该节点 maxCon:最大链接数 minCon:嘴小链接数 balance:负载均衡(在独写分离中讲解,这里用不到) writeType:写入方式(读写分离的配置,这里用不到,下一篇讲) dbType:数据库类型,是mysql仍是oracle,redis...等等,原本mycat是只支持mysql的,可是发展到如今支持多种数据库 dbDriver:数据库驱动(使用本地驱动->mycat提供的驱动) switchType:切换方式,读写分离中讲 slaveThreshold:主从复制延时(读写分离的属性,下篇讲)--> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!--heartbeat:心跳,mycat一直检测mysql的user表(心跳),当接收不到心跳时,就会认为这台mysql宕机了,就不会在对该节点作增删改查等操做--> <heartbeat>select user()</heartbeat> <!--writeHost:写节点,当独立存在时,则该节点又读又写,当与readHost同时存在时,则表示只写,不进行读操做 host属性只是标识了该台数据库的操做的内容,能够随意定义,不能重复 --> <writeHost host="write1" url="192.168.226.159:3306" user="root" password="123456"/> </dataHost> <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="write2" url="192.168.226.160:3306" user="root" password="123456"/> </dataHost> </mycat:schema>
3修改rule.xml
由于本次只使用了mod-long规则,其余的没有使用,这里count表示数据库的dataNode节点总数
配置完毕,启动mycat,由于配置了环境变量,能够在任意地方执行命令:
mycat console
而后使用mysql链接mycat,此时若是真实的mysql数据中没有数据库及表时,没法映射,所以mycat中的表会显示不存在,须要在真实的mysql数据库上建立表,而后经过mycat添加数据,能够看到一条数据存入mysql1,一条数据存入mysql2的情形。