MyCat1.6 Mysql集群Step by Step

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值