一、环境准备
- JDK
Mycat 是由 Java 语言编写的数据库中间件,所以它的运行必不可少 JDK,下面是 Mycat 的各版本与 JDK 版本对应关系表。Mycat JDK 1.3 ~ 1.5 1.7 1.6 1.8 1.7 1.7 2.0 1.8 检查当前已安装 JDK 版本的命令是
java -version
,此处略去具体的 JDK 安装步骤。 - MySQL
分别创建四个数据库实例:test、test1、test2、test3。
用户名及密码:root/123456。此处并不一定需要 root 用户,只要满足所使用的用户拥有操作上述 4 个数据库实例的权限即可。
二、安装 Mycat
-
创建 mycat 用户
通常我们所使用的环境中部署了各种应用,为了的各应用之间相互隔离,互不干扰,此处采用为 Mycat 创建一个专属的用户。
在创建用户前,先使用 root 用户检查是否已存在 mycat 用户:cat /etc/group|grep mycat cat /etc/passwd|grep mycat
若检查出的结果为空,则表示不存在 mycat 用户组及用户,可进行继续进行创建 mycat 用户:
groupadd mycat useradd -g mycat mycat
mycat 用户创建好之后,千万别忘记使用
passwd mycat
命令更改密码。 -
下载和解压
Mycat 有提供编译好的安装包,本文使用的是 Mycat-server-1.6.7.3-release–20190923113828-linux.tar.gz 版本,其他版本请至 http://dl.mycat.io/ 下载。
将下载下来的安装包上传至服务器后,解压到 /usr/local (解压的目标路径可自定义,此处仅因为笔者习惯于将应用程序放在该路径)目录下,并将其归并到 mycat 用户下。具体命令如下:tar -zxf Mycat-server-1.6.7.3-release--20190923113828-linux.tar.gz -C /usr/local
记得要使用 root 用户完成上述步骤,不然会报权限不足的错误:Permission denied。
解压后,在 /usr/local/ 目录下会出现了一个名为 mycat 文件夹,再把该文件夹的的拥有者变更为 mycat 用户,具体命令如下:
chown -R mycat:mycat /usr/local/mycat
-
配置环境变量
使用 mycat 用户编辑打开 ~/.bashrc(vim ~/.bashrc
)文件,加入 MYCAT_HOME 的设置:export MYCAT_HOME=/usr/local/mycat export PATH=$PATH:$MYCAT_HOME/bin
使用
:wq
保存退出,然后用source ~/.bashrc
命令让配置生效。
三、配置 Mycat
Mycat 从 1.5 版本开始支持两种配置方式:Zookeeper 及本地 XML 方式。Mycat 默认以本地加载 xml 的方式启动,如果需要配置成 ZooKeeper 的方式启动,则应把 conf 目录下 myid.properties 文件中的 loadZk 参数设置成 true。ZooKeeper 配置方式解决了统一配置和管理的问题,同时解决了 Mycat 与周边组件的协调问题。
如果使用 ZooKeeper 配置方式,生效的配置文件都在 conf/zkconf 目录下(xml 方式生效的配置文件都在 conf 目录下)。ZooKeeper 的配置方式依赖于 ZooKeeper,所以需要先安装 ZooKeeper 并初始化其中的数据,然后执行 bin 目录下的初始化 ZooKeeper 脚本 init_zk_data.sh。
3.1 配置 server.xml
server.xml 配置文件包含了 Mycat 的系统配置信息,它有两个重要的标签,分别是 <user>、<system>。在初次尝试使用 Mycat 时,该配置文件内大部分信息都无需变动,只需变动为 Mycat 指定专属用户的信息。
<user name="root" defaultAccount="true">
<!-- 应用访问Mycat的密码,可任意指定 -->
<property name="password">123456</property>
<!-- 须与schema.xml文件内<schema>标签的name属性值对应 -->
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">123456</property>
<!-- 须与schema.xml文件内<schema>标签的name属性值对应 -->
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
3.2 配置 schema.xml
schema.xml 作为 mycat 的重要配置文件之一,涵盖了 Mycat 的逻辑库、表、分片规则、分片节点及数据源。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn0">
<!-- 将 travel_record 表拆分到 dn1、dn2 和 dn3 节点上,分片规则是 auto sharding by id (long) -->
<table name="travel_record" dataNode="dn$1-3" ule="auto-sharding-long"/>
</schema>
<dataNode name="dn0" dataHost="localhost1" database="test"/>
<dataNode name="dn$1-3" dataHost="localhost1" database="test$1-3"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0"
dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- MySQL的连接信息-->
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456"/>
</dataHost>
</mycat:schema>
3.3 配置 rule.xml
rule.xml 里面定义了对表进行拆分所涉及到的规则定义,我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。此处仅使用默认配置即可,无需在手动配置。
四、启动
若上述步骤都成功执行,则可直接使用 mycat 用户执行启动命令:
mycat start
mycat 支持的命令{ console | start | stop | restart | status | dump }
启动成功后,可执行类似 mysql 命令进入 mycat 的监控界面:
mysql -h 127.0.0.1 -u root -p123456 -P 8066
请将 127.0.0.1 更改为 Mycat服务所在的的节点 IP 或节点名称;mycat 的监控端口为 9066,数据端口为 8066。
再创建一个存在 id 字段(分片规则 auto-sharding-long 是以 id 为分片键)的 travel_record 表,具体的建表语句如下:
CREATE TABLE travel_record (
id int(11) NOT NULL AUTO_INCREMENT,
name) DEFAULT NULL,
PRIMARY KEY (id)
);
然后,可尽情享受 Mycat 的世界。