1:前提条件
首先下载MyCat的文件。
Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz
分别解压的D盘根目录
D:\mycat
在mysql数据库上创建3个数据库db1,db2,db3让我们来看看mycat如何执行分库的!(切记这一步必须执行,否则后续步骤可能会出现失败!)
2:配置安装
修改conf/schema.xml文件,关于dataHost的配置,都使用localhost作为目标服务器!
<dataHost name="localhost_3306" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostw3306" url="localhost:3306" user="root" password="root">
<readHost host="hostr3306" url="localhost:3306" user="root" password="root" />
</writeHost>
</dataHost>
修改一下mycat的root账号的密码
<user name="root">
<property name="password">root</property>
<property name="schemas">TESTDB</property>
</user>
修改完成后,保证MySql是运行状态,执行命令,启动mycat。
D:\mycat\bin>mycat start
注:先不要做其他的改动否则可能导致启动失败!
正常启动后,执行以下命令
d:\mysql\bin>mysql -uroot -proot -hlocalhost -P8066
这样就连接上mycat了
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 rows in set (0.00 sec)
会列出只有TESTDB这一个数据库
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| company |
| customer |
| customer_addr |
| employee |
| goods |
| hotnews |
| orders |
| order_items |
| travelrecord |
+------------------+
列出了当前在Schema.xml配置的全部表名,但是这里注意,这些表名仅仅是声明了,还没有真正的创建。
3:测试
增加3个DataHost节点
<dataHost name="localhost_3306" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostw3306" url="localhost:3306" user="root" password="root">
<readHost host="hostr3306" url="localhost:3306" user="root" password="root" />
</writeHost>
</dataHost>
<dataHost name="localhost_3307" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostw3307" url="localhost:3307" user="root" password="root">
<readHost host="hostr3307" url="localhost:3307" user="root" password="root" />
</writeHost>
</dataHost>
<dataHost name="localhost_3308" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostw3308" url="localhost:3308" user="root" password="root">
<readHost host="hostr3308" url="localhost:3308" user="root" password="root" />
</writeHost>
</dataHost>
增加3个dataNode节点
<dataNode name="dn1" dataHost="localhost_3306" database="db1" />
<dataNode name="dn2" dataHost="localhost_3306" database="db2" />
<dataNode name="dn3" dataHost="localhost_3306" database="db3" />
修改employee的table描述
<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
接下来启动Mycat。
连接mycat客户端:
d:\mysql\bin>mysql -uroot -proot -hlocalhost -P8066
在连接mycat的客户端执行如下语句。
mysql>use TESTDB;
创建employee表
mysql>create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
注意:sharding_id int not null 这个是分表的策略,这个我们后面讨论。
进入db1和db2,你会发现两个库里都存在一个叫employee的表。
但是db3却没有任何表。这个都是由于我们的配置导致的。
<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
name="employee" 这个是表的名称
primaryKey="ID" 这个是主键
dataNode="dn1,dn2" 这个是dataNode节点,物理库对应的是db1,db2
rule="sharding-by-intfile" 分片规则,根据sharding_id进行区分。
关于分片规则的描述可以看看rule.xml文件.
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>字段名称
<algorithm>hash-int</algorithm>分割算法
</rule>
</tableRule>
执行数据插入:
mysql>insert into employee(id,name,sharding_id) values(1,'aaa',10000);
mysql>insert into employee(id,name,sharding_id) values(2, 'bbb',10010);
mysql>insert into employee(id,name,sharding_id) values(3, 'ccc',10000);
mysql>insert into employee(id,name,sharding_id) values(4, 'dddd',10010);
进入db1和db2,你会发现这两个库里分别添加了数据。
OK 到目前为止,默认的测试用例我们已经运行起来了。基本的分片思路也清晰了,简单描述就是。
标签描述的就是实际的数据库的映射信息。
标签描述的是物理服务器的信息。
4:添加我们自己的Schema
定义我们自己的数据库
<schema name="MYDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="test_table" primaryKey="ID" autoIncrement="true" dataNode="dn4,dn5,dn6" rule="mod-long" />
</schema>
在3306,3307,3308中创建testdb的数据库。
增加新的dataNode,主要是为了增加一个同名新库。
<dataNode name="dn4" dataHost="localhost_3306" database="testdb" />
<dataNode name="dn5" dataHost="localhost_3307" database="testdb" />
<dataNode name="dn6" dataHost="localhost_3308" database="testdb" />
接下来是关键的一步,我在这里搞了好一阵子!
修改Server.xml文件
<user name="root">
<property name="password">root</property>
<property name="schemas">TESTDB,MYDB</property>
</user>
这里是逗号分隔的,很关键。
这样就完成配置部分了。
启动mycat。
连接mycat客户端:
mysql> show databases;
+----------+
| DATABASE |
+----------+
| MYDB |
| TESTDB |
+----------+
2 rows in set (0.00 sec)
发现两个库都展示出来了。
接下来连接MYDB。
mysql>use MYDB;
mysql>create table test_table(id int not null primary key,name varchar(100));
查看三个DB实例,发现都已经创建好了test_table这个表。
mysql>insert into test_table(id,name) values(1,'aaa');
mysql>insert into test_table(id,name) values(2, 'bbb');
mysql>insert into test_table(id,name) values(3, 'ccct');
mysql>insert into test_table(id,name) values(4, 'dddd');
查看一下三个不同的DB实例上的test_table,发现数据已经有了!
OK到目前为止,我们的mycat已经运行正常了!
Mycat的管理工具有时间再分享!