mycat是使用java语言开发的,所以在部署之前需要先部署JKD,且版本需要在V1.8或以上。
a. 上传JDK,此处选择的是:jdk-8u131-linux-x64.tar.gz
b. 创建安装目录:mkdir /usr/java
c. 解压JDK压缩包到安装目录:tar -xvf jdk-8u131-linux-x64.tar.gz -C /usr/java
d. 添加环境变量
vim /etc/profile
……
JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
……
source /etc/profile #重新载入配置文件,使新增的环境变量生效。
java -version #验证JDK是否安装成功。系统返回如下提示,说明配置正确。
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Mycat提供编译好的安装包,官方网站:http://www.mycat.org.cn/,可以在Windwos、Mac、Linux等系统上运行。
Linux系统可用的安装包如下所示:Mycat-server-xxxxx.linux.tar.gz。可以采用解压即用的方式安装。
建议安装路径:/usr/local/mycat。这里使用:Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz
部署过程可以简单概括如下四步:
下载–>上传–>解压–>添加环境变量
mkdir /usr/local/mycat #创建安装目录
tar xf Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz -C /usr/local/mycat #解压到安装目录
vim /etc/profile #在该文件末尾增加以下参数,添加环境变量。
……
MYCAT_HOME=/usr/local/mycat
PATH=$MYCAT_HOME/bin:$PATH
……
source /etc/profile #重新载入配置文件,使新增的环境变量生效,安装完成。
以下内容来自《Mycat权威指南(第一版)》
- bin 程序目录,存放了 window 版本和 linux 版本,除了提供封装成服务的版本之外,也提供了 nowrap 的
shell 脚本命令,方便大家选择和修改。
Linux 下进入到 bin 目录,运行:
chmod +x *
./mycat console
注:mycat 支持的命令{ console | start | stop | restart | status | dump }- conf 目录下存放配置文件,
server.xml 是 Mycat 服务器参数调整和用户授权的配置文件,
schema.xml 是逻辑库定义和表以及分片定义的配置文件,
rule.xml 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下。
配置文件修改,需要重启 Mycat 或者通过 9066 端口 reload.- lib 目录下主要存放 mycat 依赖的一些 jar 文件.
- logs/mycat.log 中存放日志,每天一个文件,日志的配置是在 conf/log4j.xml 中,根据自己的需要,可 以调整输出级别为 debug,debug 级别下,会输出更多的信息,方便排查问题.
注意: Linux 下部署安装 MySQL,默认不忽略表名大小写,需要手动到/etc/my.cnf 下配置lower_case_table_names=1, 使 Linux 环境下 MySQL 忽略表名大小写,否则使用 MyCAT 的时候会提示找不到表的错误!
mycat的配置文件主要有2个:
vim /usr/local/mycat/conf/server.xml
……
105
106 <user name="root" defaultAccount="true"> #已授权的可以访问数据库的用户名1
107 <property name="password">123456</property> #以上用户名对应的密码
108 <property name="schemas">TESTDB</property> #可管理或可操作的数据库名
109 <property name="defaultSchema">TESTDB</property>
110 <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
111
112 <!-- 表级 DML 权限设置 -->
113 <!--
114 <privileges check="false">
115 <schema name="TESTDB" dml="0110" >
116 <table name="tb01" dml="0000"></table>
117 <table name="tb02" dml="1111"></table>
118 </schema>
119 </privileges>
120 -->
121 </user>
122
123 <user name="user"> #已授权的可以访问数据库的用户名2
124 <property name="password">user</property> #以上用户名对应的密码
125 <property name="schemas">TESTDB</property> #可管理或可操作的数据库名
126 <property name="readOnly">true</property> #以上用户的可用权限,此处是:只读
127 <property name="defaultSchema">TESTDB</property>
128 </user>
129
130 </mycat:server>
……
cp /usr/local/mycat/conf/schema.xml /use/local/mycat/conf/schema.xml.bak #备份原文件
echo > /usr/local/mycat/conf/schema.xml #清空原文件内容
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="test" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'> #设置待管理的数据库名;
</schema>
<dataNode name="dn1" dataHost="dthost" database="test"/> #设置待管理的数据库名;
<dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> #配置读写分离规则和自动切换规则,详见下一部分解释。
<heartbeat>select user()</heartbeat>
<writeHost host="Master" url="主库IP:3306" user="mycat" password="123456"> #配置主库的域名和IP地址
</writeHost>
<writeHost host="Slave" url="从库IP:3306" user="mycat" password="123456" /> #配置从库的域名和IP地址
</dataHost >
</mycat:schema>
……
关于读写分离规则参数:balance
balance=“0”,不开启读写分离,所有读操作均发送到当前可用的writehost上;
balance=“1”,所有的readHost和stand by writeHost都参与select语句的负载均衡。
balance=“2”,所有读请求随机分发到writeHost和readHost上。
balance=“3”,所有读请求随机分发到writeHost对应的readHost上,即writeHost不承担读请求的压力。
关于自动切换参数switchType:
switchType=“-1”,不自动切换;
switchType=“1”,默认值,自动切换;
switchType=“2”,基于MySQL主从同步的状态,决定是否切换,心跳语句:show slave status
switchType=“3”,基于MySQL galary cluster的切换机制,心跳语句:show status like 'wsrep%',适用于集群。
分别在主库和从库中,授权mycat账号可以登录主库和从库,用于写入或读取数据。
grant all on . to ‘mycat’@’%’ identified by ‘123456’;
可以根据具体需求授予不同的权限。
[root@ZbxMaster ~]# mycat
Usage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
[root@ZbxMaster conf]# mycat start #启动
Starting Mycat-server...
[root@ZbxMaster conf]# tail -f ../logs/wrapper.log #查看wrapper日志,确认启动是否成功。
STATUS | wrapper | 2020/06/23 10:36:48 | --> Wrapper Started as Daemon
STATUS | wrapper | 2020/06/23 10:36:48 | Launching a JVM...
INFO | jvm 1 | 2020/06/23 10:37:26 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2020/06/23 10:37:26 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2020/06/23 10:37:26 |
INFO | jvm 1 | 2020/06/23 10:38:09 | MyCAT Server startup successfully. see logs in logs/mycat.log
STATUS | wrapper | 2020/06/23 11:23:49 | TERM trapped. Shutting down.
STATUS | wrapper | 2020/06/23 11:23:50 | <-- Wrapper Stopped
STATUS | wrapper | 2020/06/23 11:23:56 | --> Wrapper Started as Daemon
STATUS | wrapper | 2020/06/23 11:23:57 | Launching a JVM...
INFO | jvm 1 | 2020/06/23 11:24:29 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2020/06/23 11:24:29 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2020/06/23 11:24:29 |
INFO | jvm 1 | 2020/06/23 11:25:34 | MyCAT Server startup successfully. see logs in logs/mycat.log #提示启动成功
[root@ZbxMaster conf]# mycat stop #关闭
Stopping Mycat-server...
Stopped Mycat-server. #提示关闭成功
Startup failed: Timed out waiting for a signal from the JVM.
JVM did not exit on request, terminated
解决办法
在wrapper.conf中添加
wrapper.startup.timeout=300 //超时时间300秒
wrapper.ping.timeout=120