Centos7安装Mycat
使用MyCat需要使用MySQL【点这里】
MyCat下载链接:http://dl.mycat.org.cn/
【优快云下载】
简介
之前研究过MySQL的一个中间件amoeba来做MySQL数据库的读写分离,今天带来一个功能更为强大的中间件——mycat,从定义和分类来看,它是一个开源的分布式数据库系统,但是本身并不存储数据,它是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表(这点amoeba不支持)。说它是MySQL的中间件,其实发展到现在的版本,也不只这么简单了,它可以支持包括MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库和MongoDB等NOSQL数据库。
mycat原理:可以用“拦截”一词形容,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析等,然后将此sql发往后端的真实数据库,并将返回的结果做适当处理,最终返回给用户
1、下载Mycat
下载linux.tar.gz
2、将压缩包解压
2、1进入目录
cd /
cd /usr/local
2、2解压压缩包
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
rm -rf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
- bin:命令文件
- catlet:空的,扩展
- conf:配置文件(server.xml,schema.xml,rule.xml等)
- lib:依赖的jar包
3、使用Mycat
一下命令均在cd /usr/local/mycat/bin
中
启动命令后台启动
./mycat start
启动命令前台启动
./mycat console
停止命令
./mycat stop
重启命令
./mycat restart
查看状态
./mycat status
3、1修改配置文件 /usr/local/mycat/conf/schema.xml
这里配置mysql的地址、用户名和密码
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- TESTDB是mycat数据库,注意名称必须和server.xml中配置的一致 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- dn1、dn2、dn3是mysql中的三个数据库节点,分别代替三个不同的数据库。
dataNode该属性定义逻辑表所属的数据库,
rule属性用于指定逻辑表要使用的规则名字,规则名字在rule.xml中定义。
-->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<!--
primaryKey属性指定逻辑表对应的主键,
type属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型,不指定即为普通表
-->
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<!-- autoIncrement指定这个表有使用自增长主键,默认为false -->
<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
rule="mod-long" />
<table name="employee" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile">
<childTable name="orders" primaryKey="ID" joinKey="customer_id"
parentKey="id">
<childTable name="order_items" joinKey="order_id"
parentKey="id" />
</childTable>
<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
parentKey="id" />
</table>
</schema>
<!-- 配置mysql数据库节点,一个dataNode代表一个数据库 -->
<dataNode name="dn1" dataHost="127.0.0.1" database="db1" />
<dataNode name="dn2" dataHost="127.0.0.1" database="db2" />
<dataNode name="dn3" dataHost="127.0.0.1" database="db3" />
<!-- dataHost用来定义具体的mysql以及读写分离 -->
<!--
maxCon/maxCon指定最大最小连接数,
balance=“0”, 所有读操作都发送到当前可用的writeHost上。
balance=“1”,所有读操作都随机的发送到readHost。
balance=“2”,所有读操作都随机的在writeHost、readhost上分发。
writeType=“0”, 所有写操作都发送到可用的writeHost上。
writeType=“1”,所有写操作都随机的发送到readHost。
writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
dbType指定数据库类型,支持oracle、mongodb等
dbDriver指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。
-->
<dataHost name="127.0.0.1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- heartbeat标签指定后端数据库进行心跳检查的语句。例如,MYSQL可以使用select user(),Oracle可以使用select 1 from dual等-->
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="127.0.0.1:3306" user="root"
password="root">
<!-- <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" /> -->
</writeHost>
<!-- <writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" /> -->
</dataHost>
</mycat:schema>
当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/
3、2 server.xml
这里配置mycat的用户名密码
<!-- 配置根用户和密码,这里的TESTDB需要和schema.xml配置的名称一致 -->
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
<!-- 配置用户和密码,设置权限为只读 -->
<user name="test">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
3、3修改用户和组
修改mycat目录所属的用户和组为mycat用户
groupadd mycat
adduser -r -g mycat mycat
chown -R mycat.mycat /usr/local/mycat/
3、4修改MySQL配置文件
提示:若是Linux版本的MySQL,则需要设置为MySQL大小写不敏感,否则可能会发生表找不到的问题。
在MySQL的配置文件中/etc/my.cnf [mysqld] 中增加一行
lower_case_table_names=1
4、链接mycat
需要先在MySQL中创建三个数据库,以便来测试链接是否成功。
这里登录用户的账号和密码需要与conf/server.xml
文件中的相同。
#-u用户名 -p密码 -P端口9066 -h为ip地址
mysql -uroot -p123456 -h127.0.0.1 -P8066 -DTESTDB