mycat数据库分库分表的中间件
仅用于测试环境
版本mycat 1.6.7.4
mycat部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下载解压二进制包 cd /root/wget https://github.com/MyCATApache/Mycat-Server/releases/download/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz tar -xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz 安装java环境 yum -y install java 测试启动 /root/bin/mycat start ps -ef | grep mycat ss -tunlp | grep 8066 ps -ef能看到mycat且8066端口被监听说明启动已经成功
登录mycat
1 2 3 4 5 6 7 8 9 10 11 12 server.xml 用户配置文件 schema.xml 读写分离配置文件 根据schema.xml的最后几行参数登录mycat <user name="user" > <property name="password" >user</property> <property name="schemas" >TESTDB</property> <property name="readOnly" >true </property> <property name="defaultSchema" >TESTDB</property> </user> 登录mycat mysql -uuser -puser -P8066 -h127.0.0.1
mycat读写分离配置 mycat配置读写分离需要一个主库和一个从库
我目前的环境是双主多从的一个环境,就拿这个来配吧
192.168.10.126 主 192.168.10.125 主2 192.168.10.127 备 192.168.10.128 备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 1.先在主库创建两个库ws和xhy,后面要用 create database ws; create database xhy; 2.修改配置文件schema.xml <?xml version="1.0" ?> <!DOCTYPE mycat :schema SYSTEM "schema.dtd" > <mycat:schema xmlns:mycat ="http://io.mycat/" > <schema name ="db01" checkSQLschema ="false" sqlMaxLimit ="100" dataNode ="dn1" > </schema > <schema name ="db02" checkSQLschema ="false" sqlMaxLimit ="100" dataNode ="dn2" > </schema > <dataNode name ="dn1" dataHost ="localhost1" database ="ws" /> <dataNode name ="dn2" dataHost ="localhost1" database ="xhy" /> <dataHost name ="localhost1" maxCon ="500" minCon ="20" balance ="1" writeType ="0" dbType ="mysql" dbDriver ="native" switchType ="1" slaveThreshold ="100" > <heartbeat > select user()</heartbeat > <writeHost host ="master" url ="192.168.10.126:3306" user ="root" password ="root" > <readHost host ="slave1" url ="192.168.10.127:3306" user ="root" password ="root" /> <readHost host ="slave2" url ="192.168.10.128:3306" user ="root" password ="root" /> </writeHost > </dataHost > </mycat:schema > 定义了两个逻辑数据库分别叫db01和db02 这两个逻辑数据库分别关联了dataNode dn1和dn2(逻辑的) dn1和dn2关联了数据库中的两个真实库ws和xhy 同时dn1和dn2还关联了一个共同的名字叫localhost1的dataHost分组 在localhost1的dataHost中指定了心跳测试的方法 指定可写的主数据库地址192.168.10.126和密码 指定只读的从数据库地址192.168.10.127和密码 指定只读的从数据库地址192.168.10.128和密码 3.修改server.xml 删除最后几段(包括默认user也要删除) 重新定义一下用户名、密码和相关的表,将上面的虚拟表db01 db02关联上去 <user name ="admin" > <property name ="password" > admin</property > <property name ="schemas" > db01,db02</property > <property name ="readOnly" > false</property > </user > 4.重启mycat /root/mycat/bin/mycat stop /root/mycat/bin/mycat start netstat -tunlp | grep 8066 #tcp6 0 0 :::8066 :::* LISTEN 9406/java
测试mycat写入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 5.登录mycat mysql -uadmin -padmin -P8066 -h 127.0.0.1 或者用navicat 在db01建一个表 use db01; create table test01 (id int auto_increment primary key,name varchar(20) not null); insert into test01 value(1,'ws'),(2,'xhy'); 此时主库已经有这个表了 select * from ws.test01; +----+------+ | id | name | +----+------+ | 1 | ws | | 2 | xhy | +----+------+ 2 rows in set (0.00 sec)
测试mycat读写分离 在从库写入数据,使其主从不同步,再从mycat进行读取,看会读取到主的数据,还是从的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 6.在从库(mysql-3)写入 mysql -uroot -proot insert into ws.test01 value(3,'zhangsan'); select * from test01; +----+----------+ | id | name | +----+----------+ | 1 | ws | | 2 | xhy | | 3 | zhangsan | +----+----------+ 3 rows in set (0.00 sec) 在mycat中查看db01.test01 mysql -uadmin -padmin -P8066 -h 127.0.0.1 use db01; mysql> select * from test01; +----+----------+ | id | name | +----+----------+ | 1 | ws | | 2 | xhy | | 3 | zhangsan | +----+----------+ 3 rows in set (0.00 sec) mycat中看到的与mysql-3一致 说明mycat是从从库(mysql-3)中读取