一、环境介绍
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
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" />
<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
</schema>
<dataNode name="dn1" dataHost="c1" database="lujw_mycat_db" />
<dataNode name="dn2" dataHost="c2" database="lujw_mycat_db" />
<!-- 主机C1 -->
<dataHost name="c1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.171.53:1234" user="user" password="123456">
</writeHost>
</dataHost>
<!-- 主机C2 -->
<dataHost name="c2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.171.54:1234" user="user" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
2. 配置 server.xml
在尾部添加一个访问数据库的用户,具体看个人用户设置
格式如下
<!-- 为mycat配置一个用户 -->
<user name="cat">
<property name="password">cat</property>
<property name="schemas">TESTDB</property>
</user>
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 的规则
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
再打开属性文件 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
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
再次启动 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
这说明分片成功了
网友评论