搭建参考资料:https://www.cnblogs.com/ouhouki/p/9628837.html
配置文件详解:http://www.mycat.io/document/mycat-definitive-guide.pdf
环境
Centos7
JDK8
MyCat
mysql
作用
MyCat作为一个数据库中间件,对客户端的请求进行转发到主数据库与从数据库,从而实现读写分离【前提是基于后端MySQL集群的主从同步实现的】
安装
分别装三台虚拟机,一台安装jdk和mycat,另外2台实现mysql主从复制(参考之前的文章进行搭建)
master-slave模式
项目 mycat mysql_master mysql_slave
IP 192.168.1.102 192.168.1.25 192.168.1.28
PORT 8066/9066 3306 3306
myCat配置
server.xml配置
vim /opt/mycat/conf/server.xml
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">testdb</property>
<property name="usingDecrypt">0</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="usingDecrypt">0</property>
<property name="password">user</property>
<property name="schemas">testdb</property>
<property name="readOnly">true</property>
</user>
user:操作mycat的用户
name:账号
password:密码
schemas:数据库名
privileges:表级权限设置
readOnly :true 或 false 来限制用户对数据库是否可读写的权限,true为只读,false为读写
usingDecrypt:是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密,加密命令方法是执行mycat的jar程序
dml权限
说明:insert,update,select,delete为权限顺序,0表示禁止,1则允许。
server.xml配置
vim /opt/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 数据库配置,与server.xml中的数据库对应 -->
<schema name="testdb" checkSQLschema="true" sqlMaxLimit="100">
<table name="travel_record" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="host1" database="testdb"/>
<!-- 物理数据库配置 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user();</heartbeat>
<writeHost host="M1" url="192.168.1.25:3306" user="root" password="root">
<readHost host="S1" url="192.168.1.28:3306" user="root" password="root"/>
</writeHost>
</dataHost>
</mycat:schema>
schema里的name: 对应server.xml的schemas
dataNode里的database:对应数据库名
writeHost:对应mysql_master,主服务器的数据库
readHost:对应mysql_slave,从服务器的数据库
创建数据库表
在mysql_master(192.168.1.25)进行创建,从机会自动同步过去,因为之前已经配置了主从配置。
--创建数据库
create database testdb;
--使用当前库
use testdb;
--创建测试表travel_record
CREATE TABLE IF NOT EXISTS `travel_record`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`org_code` VARCHAR(20) NOT NULL,
`org_name` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
启动mycat
通过bin目录下mycat脚本启动,执行./mycat start
mycat服务器操作数据库(192.168.1.102)
mysql -h 127.0.0.1 -uroot -p123456 -P8066
mycat服务器查看mycat数据库(192.168.1.102)
mysql -h 127.0.0.1 -uroot -p123456 -P9066
使用native连接mycat
账号密码为server.xml里配置的账号密码,不是主从数据库的账号密码
注意:mycat中呈现的是逻辑表,不是存放数据的载体,当插入数据查询数据时,是从主从数据库中请求过来的。
测试
总结
在mycat服务器插入数据,查询数据,均会根据配置文件转发到主从数据库中去,实现读写分离,主从数据库如果关机,mycat服务器则失效,native客户端也无法连接到mycat。
mycat数据库中间件系统起到一个代理的作用。