1.什么是数据库中间件
应用和数据库之间的代理层,这个代理层可以帮助我们完成很多事情,比如说,数据监控,心跳感应,分库分表,
读写分离,sql拦截注入
//mycat 官网
http://www.mycat.io/
2.MyCat 安装
//下载mycat .tgz 安装包
http://www.mycat.io/
解压
移动到 /usr/local 下
//修改配置文件
主要是 server.xml 和 schema.xml
//启动
bin/mycat start
//查看日志
logs/wrapper.log
server.xml 配置
scheme.xml 配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
这里的name="shop" 跟刚刚 server.xml 配置的要一样
这里要指定一个 dataNode="dn1"
-->
<schema name="shop" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!--
name="dn1"
dataHost="localhost1"
database="test" // 实际的数据库名称
-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!--
name="localhost1"
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--
心跳,执行了一个sql语句
-->
<heartbeat>select user()</heartbeat>
<!--
写的主机
-->
<writeHost host="hostM1" url="192.168.0.113:3306" user="mycat"
password="123456" />
</dataHost>
</mycat:schema>
//在真实主机给mycat主机授权
grant all on *.* to mycat@192.168.0.106 identified by '123456';
//启动
bin/mycat start
//查看日志是否启动成功
vim logs/wrapper.log
//查看状态
bin/mycat status
//mycat 监听的端口
netstat -anp | grep 8066
//从其他主机连接mycat 主机
mysql -h 192.168.0.106 -u root -p -P8066
配置读写分离
scheme.xml 配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
这里的name="shop" 跟刚刚 server.xml 配置的要一样
这里要指定一个 dataNode="dn1"
-->
<schema name="shop" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!--
name="dn1"
dataHost="localhost1"
database="test" // 实际的数据库名称
-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!--
name="localhost1"
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<!--
心跳,执行了一个sql语句
-->
<!-- <heartbeat>select user()</heartbeat> -->
<heartbeat>show slave status</heartbeat>
<!--
写的主机
-->
<writeHost host="hostM1" url="192.168.0.113:3306" user="mycat" password="123456" >
<readHost host="hostS1" url="192.168.0.108:3306" user="mycat" password="123456"/>
</writeHost>
</dataHost>
</mycat:schema>
1.主库和从库分别对mycat服务器授权
grant replication slave on *.* to slave@192.168.0.106 identified by '123456';
可以到日志已经在从库读
tail -f logs/mycat.log
mycat 双主:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
这里的name="shop" 跟刚刚 server.xml 配置的要一样
这里要指定一个 dataNode="dn1"
-->
<schema name="shop" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!--
name="dn1"
dataHost="localhost1"
database="test" // 实际的数据库名称
-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!--
name="localhost1"
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<!--
心跳,执行了一个sql语句
-->
<!-- <heartbeat>select user()</heartbeat> -->
<heartbeat>show slave status</heartbeat>
<!--
写的主机
-->
<writeHost host="hostM1" url="192.168.0.113:3306" user="mycat" password="123456" >
<readHost host="hostS1" url="192.168.0.108:3306" user="mycat" password="123456"/>
</writeHost>
<writeHost host="hostM1" url="192.168.0.113:3306" user="mycat" password="123456" >
<readHost host="hostS1" url="192.168.0.108:3306" user="mycat" password="123456"/>
</writeHost>
</dataHost>
</mycat:schema>
这时候可以人为的停掉一台机器测试
mycat 分片操作
1.先创建3个数据库
create database test1;
create database test2;
create database test3;
并在3个库里面创建表a
CREATE TABLE `a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
按哈希分表;
scheme.xml
conf/rule.xml
注意主键id冲突问题, server.xml,配置为0,使用本地文件来进行配置
conf/sequence_conf.properties(本地配置文件)
#default global sequence
GLOBAL.HISIDS=
#最小id
GLOBAL.MINID=10001
#最大id
GLOBAL.MAXID=20000
#当前id
GLOBAL.CURID=10000
# self define sequence
TEST.HISIDS=
TEST.MINID=1001
TEST.MAXID=2000
TEST.CURID=1000
插入数据
insert into a (id,name) values(next value for MYCATSEQ_TEST,'c');