1、mycat概述
Mycat 是基于阿里巴巴曾经开源的知名产品 - cobar 演变而来, 简单来说MyCAT就是一个数据库中间件产品支持mysql集群, 你可以像使用mysql一样使用mycat。
其实可以这么简单理解: 你有多个数据库, 那么你存数据的时候存到哪个数据库呢? 所以我们需要一个存储策略, 而mycat就是做这个事情的, 简单来说: mycat就是管理数据库集群的.
2、Mycat安装包准备
此文档基于三台数据库服务器搭建mycat集群
192.168.139.15 数据库 mycat部署服务器
192.168.139.100 数据库
192.168.139.200 数据库
2.1、上传java jdk1.8环境变量
新建mycat用户
[root@study ~]# useradd mycat
· 用mycat用户进行下面操作
运行配置mycat需要先配置jdk环境变量,先将准备好的java jdk1.8的包,上传到需要部署mycat的服务器上/home/mycat目录下
解压jdk包
[mycat@study ~]# cd /home/mycat
[mycat@study ~]# tar -zxvf jdk-8u45-linux-x64.tar.gz
2.2、Mycat软件包下载
下载地址http://www.mycat.io 选择所需要对应版本的软件包
2.3、Mycat安装
将下载好的mycat软件包,使用mycat用户上传到服务器/home/mycat/目录下,并解压
使用命令:
[mycat@study ~]# tar -zxvf mycat*
[mycat@study ~]# ll
解压完后可以在/home/mycat目录下看到一个mycat文件夹,这里面就是mycyat,cd到刚解压的mycat目录下,使用命令将里面的文件移动到上一层目录
命令:
[root@study ~]# cd /home/mycat/mycat
[root@study mycat]# mv * ../
[root@study mycat]# cd ..
2.4、配置环境变量
使用mycat用户,修改~/.bash_profile文件
命令:
[mycat@study ~]# vim ~/.bash_profile
在下面新增以下内容
export MYCAT_HOME=/home/setup/mycat
export JAVA_HOME=/home/setup/java/jdk1.8.0_45
export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$MYCAT_HOME/bin:
(需要注意的是,PATH在配置的时候,一定要把$JAVA_HOME/bin放在前面)
图示:
修改完成后,让其变量生效
[mycat@study ~]# source ~/.bash_profile
3、Mycat配置
3.1、修改host名称
使用root用户操作
[root@study ~]# vim /etc/hosts
#在最下面新增需要配置的三台服务器主机
172.21.118.27 mycat1
172.21.118.28 mycat2
172.21.118.19 mycat3
3.2、分片配置
mycat的分片策略
· 逻辑库 (schema)
逻辑库不是真实存在的, 想要把数据存储到物理库中, 就需要通过逻辑库来操作, 简单来说: 逻辑库是来管理和调度物理库的.
· 逻辑表 (table)
逻辑表的概念是类似于逻辑库的, 逻辑表是来管理和调度物理表的.
· 分片节点 (dataNode)
ip+数据库名
· 节点主机 (dataHost)
分片节点所在的主机
· 分片规则 (rule)
就是拆分的算法, 如何来拆分呢? 就要用到分片规则
这里分为三步:
• 连接mysql, 创建三个数据库db1, db2, db3 (注意是连接mysql, 不是mycat)
• 修改schema.xml文件
• 修改server.xml文件
• 修改rule.xml文件
** 3.2.1 连接mysql,分别创建三个数据库db1、db2、db3 **
· 登陆第一台mysql数据库,创建db1库
命令:
[mycat@study mycat]$ mysql -ucincc -pcinCC1234
mysql> CREATE DATABASE `db1` CHARACTER SET 'utf8';
· 登陆第二台mysql数据库,创建db1库
命令:
[mycat@study mycat]$ mysql -ucincc -pcinCC1234
mysql> CREATE DATABASE `db2` CHARACTER SET 'utf8';
· 登陆第三台mysql数据库,创建db1库
命令:
[mycat@study mycat]$ mysql -ucincc -pcinCC1234
mysql> CREATE DATABASE `db3` CHARACTER SET 'utf8'
** 3.2.2、 修改server.xml文件**
这里主要配置mycat的用户和权限信息,这里的账户用于后面连接mycat使用。
命令:
[mycat@study ~]$ vim ~/mycat/conf/server.xml
# 修改最下面逻辑库的用户名和密码
<user name="cincc">
<property name="password">cinCC1234</property>
<property name="schemas">TESTERDB</property>
</user>
** 3.2.2、 修改schema.xml文件**
这里主要配置数据库信息,一个schema就是一个逻辑库,可以理解为Mycat管理的一个数据库DB(实际上不存在,是一个虚拟的概念)name属性和server.xml里面对应。
table是Mycat的逻辑表,这里我们配置一个名为tb_test的逻辑表
dataNode属性是将其绑定在真实数据库中的数据节点
dataHost属性就是我们的mysql连接
rule属性就是分片规则
命令:
[mycat@study ~]$ vim ~/mycat/conf/schema.xml
修改以下内容:
3.3、启动mycat
启动命令:mycat start
查看命令:mycat status
重启命令:mycat restart
启动时查看是否报错命令:mycat console
3.4、测试mycat分片
我们用mysql客户端连接mycat, 在mycat中执行下面的SQL语句, 创建一张tb_test表
命令:
[mycat@study ~]# mysql -uroot -proot -P8066
mysql> CREATE TABLE tb_test (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
我们再查看MySQL的3个库, 发现表都自动创建好了.
接下来是插入表数据, 我们来插入一些数据
INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1');
INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2');
INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');
INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');
INSERT INTO TB_TEST(ID,TITLE) VALUES(10000001,'goods10000001');
查看结果, 我们发现前3条数据插入到了db1中, 第4条数据插入到了db2中, 第5条数据插入到了db3中…
具体的分片规则可以查看官方文档说明,也可以进行自定义分片。
评论区