MyCat1.6 Mysql集群Step by Step

来源:互联网 发布:建筑学软件图片 编辑:程序博客网 时间:2024/05/13 11:53

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,db2rule="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的管理工具有时间再分享!

0 0
原创粉丝点击