大家常说的MyCat是个什么玩意儿?使用它可以干些什么?
Posted 菜鸟封神记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家常说的MyCat是个什么玩意儿?使用它可以干些什么?相关的知识,希望对你有一定的参考价值。
1、MyCat是什么?
简单介绍: MyCat是一个基于Java开发的数据库中间件产品,可以支持市面上大多数的数据库,提供强大的数据分片处理能力。
详细介绍: 请参考官网http://www.mycat.io/
2、MyCat能做什么?
常用的功能为基于心跳的自动故障切换,读写分离,分表;更多功能介绍请参考官网首页上的关键特性部分:
3、搭建
服务器规划:
主库服务器:192.168.0.4:3306
从库服务器:192.168.0.5:3306
代理服务器:192.168.0.6
JDK:jdk1.8.0_161.tar.gz
操作系统:CentOS6.9 x86_64
3.1、配置jdk环境,操作过程如下
[root@mysql-proxy java]# mkdir -pv /usr/local/java
[root@mysql-proxy java]# tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local/java
[root@mysql-proxy java]# vim /etc/profile
#添加如下内容
JAVA_HOME=/usr/local/java/jdk1.8.0_161
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL CLASSPATH
#使环境变量生效
[root@mysql-proxy java]# source /etc/profile
#验证是否配置成功
[root@mysql-proxy java]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
[root@mysql-proxy java]# javac -version
javac 1.8.0_161
3.2、下载mycat安装包,上传至服务器,然后解压
[root@mysql-proxy ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
3.3、配置schema.xml
[root@mysql-proxy local]# vim /usr/local/mycat/conf/schema.xml
#写入如下内容
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--schema节点:
name:数据库设置,此数据库为逻辑数据库,name与server.xml中的schema对应
checkSQLschema:数据库前缀设置,当该值为true时,当我们执行语句SELECT * FROM TESTDB.student。mycat会把语句修改为SELECT * FROM student 去掉TESTDB
sqlMaxLimit:当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,MyCat会自动加上对应的值。不写的话,默认返回所有的值
dataNode:与下文中的dataNode对应
-->
<schema name="test_db" checkSQLschema="false" sqlMaxLimit="100" dataNode="wb_node"></schema>
<!--dataHost节点:
name:定义数据节点的名字,这个名字需要唯一。我们在table标签上用这个名字来建立表与分片对应的关系
dataHost:用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应
database:用于定义该分片属于数据库实例上 的具体库
-->
<dataNode name="wb_node" dataHost="wb_host" database="test_db" />
<dataHost name="wb_host" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!--writeHost配置写示例-->
<!--
host:标识不同主机,不同即可
url:标识实例所在的域名(ip)和端口
username:mycat实例连接数据库实例所用的用户名
password:mycat实例连接数据库实例所用的密码
-->
<writeHost host="mysql-server01" url="192.168.0.4:3306" user="root" password="root">
<!-- can have multi read hosts -->
<!--配置只读实例-->
<readHost host="mysql-server02" url="192.168.0.5:3306" user="root" password="root" />
</writeHost>
<writeHost host="mysql-server02" url="192.168.0.5:3306" user="root" password="root" />
</dataHost>
</mycat:schema>
其他参数解释如下:
balance:负载策略
balance="0",不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
balance="2",所有读操作都随机的在writeHost、readHost上分发
balance="3",所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。
writeType:负载均衡类型
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost
switchType:发生故障是否自动切换
switchType="1",默认值 自动切换
switchType="2",基于MySql主从同步的状态决定是否切换心跳语句为 show slave status
switchType="3",基于mysql galary cluster 的切换机制(适合集群)1.4.1版本的心跳语句为 show status like 'wsrep%'
3.4、配置server.xml
[root@mysql-proxy conf]# vim server.xml
#写入如下内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!--登录的用户名,也就是连接MyCat的用户名-->
<user name="user">
<!--登录的密码,也就是连接MyCat的密码-->
<property name="password">user</property>
<!--数据库名,会和schema.xml中的配置关联,多个用逗号分开-->
<property name="schemas">test_db</property>
<!--表示该用户是否是只读用户,如果为true,则该用户只能执行DQL操作-->
<property name="readOnly">false</property>
</user>
</mycat:server>
3.5、配置jdk的执行路径
[root@mysql-proxy conf]# vim wrapper.conf
#将如下内容改为自己java命令所在的路径
wrapper.java.command=/usr/local/java/jdk1.8.0_161/bin/java
3.6、配置主机名称
如果主机配置有主机名称,需要在/etc/hosts文件中指定,否则启动mycat会提示找不到主机名类似的错误,本人配置的主机名称为mysql-proxy,所以需要在/etc/hosts文件中加如下内容
[root@mysql-proxy conf]# vim /etc/hosts
#添加如下内容
192.168.0.6 mysql-proxy
3.7、启动mycat服务
[root@mysql-proxy conf]# cd /usr/local/mycat/bin/
3.8、查看是否启动成功,mycat启动之后,会默认监听在tcp的8066端口
[root@mysql-proxy logs]# netstat -tunlp | grep 8066
tcp 0 0 :::8066 :::* LISTEN 2994/java
4、测试mycat的读写分离
4.1、使用server.xml配置文件中配置的用户连接mycat服务
[root@mysql-proxy logs]# mysql -uuser -puser -P8066
4.2、查看数据库,会看到配置文件中所配置的数据库
mysql> SHOW DATABASES;
+----------+
| DATABASE |
+----------+
| test_db |
+----------+
1 row in set (0.01 sec)
注意:
a、在server.xml中会配置数据库名称,这个数据库名称和schema.xml中配置的数据库关联,如果配置多个数据库,中间使用逗号隔开。如:db1,db2。
b、配置的数据库提前需要存在,否则使用过程中会出现错误。
4.3、验证读写分离效果
首先需要修改mycat的日志级别,因为mycat默认的日志级别为info级别,看不到主机,查询语句等信息,需要将其改为debug级别
[root@mysql-proxy conf]# cd /usr/local/mycat/conf/
[root@mysql-proxy conf]# vim log4j2.xml
#修改如下内容
<Loggers>
<!--将asyncRoot中的level="info"改为level="debug"-->
<asyncRoot level="debug" includeLocation="true">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile"/>
</asyncRoot>
</Loggers>
4.4、保存,重启mycat服务
[root@mysql-proxy conf]# cd ../bin/
[root@mysql-proxy bin]# ./mycat restart
4.5、查看实时日志
[root@mysql-proxy bin]# tail -f ../logs/wrapper.log
4.6、执行create建表操作
重新打开一个shell窗口,然后执行创建表操作
mysql> CREATE TABLE student(id int);
Query OK, 0 rows affected (0.21 sec)
4.7、执行select读操作
然后执行select操作,查看日志。如下,可以看到查询表的操作是在slave(192.168.0.5)上完成的
mysql> SELECT * FROM student;
Empty set (0.01 sec)
近期精彩回顾:
常驻内容:
源码搭建:
关注菜鸟封神记,定期分享技术干货!
点赞和在看是最大的支持,感谢↓↓↓
以上是关于大家常说的MyCat是个什么玩意儿?使用它可以干些什么?的主要内容,如果未能解决你的问题,请参考以下文章