一、环境介绍
1. mysql 节点1环境
- 操作系统: centos x64
- 数据库名: lujw_mycat_db_53_1
- hostname: c1
- ip: 192.168.171.53
2. mysql 节点2环境
- 操作系统: centos x64
- 数据库名: lujw_mycat_db_54_1
- hostname: c2
- ip: 192.168.171.54
3. mycat 环境
安装在个人电脑 MacBook 上
版本:1.6 release
4. 前提条件
安装好 mycat,两个节点安装好 mysql
二、配置 mycat
1. 配置 schema.xml
根据个人情况修改 url,user,password
select user()
select user()
2. 配置 server.xml
在尾部添加一个访问数据库的用户,具体看个人用户设置
格式如下
cat
TESTDB
3. 创建数据库
分别在两个节点上使用 mysql 创建 lujw_mycat_db 数据库
三、启动 mycat
使用 mycat start
指令尝试运行 mycat,会发现在 logs 目录下的输出日志 wrapper.log 中出现错误,这是因为 mycat 默认的 schema.xml 配置了三个节点,相应的 rule.xml 中的规则也设置了三个节点。我们可以根据日志中的提示找到相应的 rule,然后进行修改。例如
Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ TRAVELRECORD ] rule function [ rang-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size
打开 rule.xml 找到上述 rang-long 的规则
autopartition-long.txt
再打开属性文件 autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
修改为两个节点的配置
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1500M=1
# 1000M-1500M=2
根据日志所有的提示,我们还需要修改的规则有
mod-long: count 3 --> 2
2
再次启动 mycat,在 wrapper.log 和 mycat.log 中会得到启动成功的信息
四、测试
在 mycat.log 日志中搜索 serverport,可以看到 serverport=8066,使用 mysql 连接这个端口,可以查到根据我们配置好的信息创建的数据库和表
./mysql -u root -p123456 -P8066 -h127.0.0.1
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.01 sec)
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| company |
| employee |
| goods |
| hotnews |
| travelrecord |
+------------------+
5 rows in set (0.00 sec)
虽然查到了 tables,但其实那些都是空的,所以还需要我们手动创建一次,这里以 employee 为例
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
然后插入数据
insert into employee(id,name,sharding_id) values(1,'leader us',10000);
insert into employee(id,name,sharding_id) values(2, 'me',10010);
insert into employee(id,name,sharding_id) values(3, 'mycat',10000);
insert into employee(id,name,sharding_id) values(4, 'mydog',10010);
分别到两个节点中的数据库查看,可以看到在数据库1中有:
1 leader us 10000
3 mycat 10000
数据库2中有:
2 me 10010
4 mydog 10010
这说明分片成功了