SuSE上运行MyCat(二):配置单点MyCat

SuSE上运行MyCat(二):配置单点MyCat

目标

通过本文操作,搭建静态结构如下图的一个MyCat集群。为了节省资源,3个物理库都将存放在同一个MySQL实例当中。

部署MySQL节点

创建分片节点(库)


CREATE DATABASE mycat00;
CREATE DATABASE mycat01;
CREATE DATABASE mycat02;

CREATE TABLE mycat00.test_tbl(
id INT UNSIGNED NOT NULL PRIMARY KEY,
date DATETIME NOT NULL );
CREATE TABLE mycat01.test_tbl(
id INT UNSIGNED NOT NULL PRIMARY KEY,
date DATETIME NOT NULL );
CREATE TABLE mycat02.test_tbl(
id INT UNSIGNED NOT NULL PRIMARY KEY,
date DATETIME NOT NULL );

创建虚拟表用户


CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILIGES ON `mycat%`.* TO 'root'@'%';

插入原始数据


INSERT INTO mycat00.test_tbl(id,date)
VALUES (0,'2000-01-01');

INSERT INTO mycat01.test_tbl(id,date)
VALUES (1,'2000-02-01');

INSERT INTO mycat02.test_tbl(id,date)
VALUES (2,'2000-03-01');

配置MyCat

MyCat的配置文件集中在其配置文件夹/usr/local/mycat/conf内,以下工作将以该文件夹为基准。

路由规则(rule.xml)

备份原有路由规则文件rule.xml后,将整个rule.xml改写成如下内容:


<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
  - you may not use this file except in compliance with the License. - You
  may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
  - - Unless required by applicable law or agreed to in writing, software -
  distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
  License for the specific language governing permissions and - limitations
  under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
  <tableRule name="cicular_month_rule">
    <rule>
      <columns>date</columns>
      <algorithm>cicular_month</algorithm>
    </rule>
  </tableRule>

  <function name="cicular_month"
    class="io.mycat.route.function.PartitionByMonth">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2000-01-01</property>
    <property name="sEndDate">2000-03-01</property>
    <property name="nPartition">3</property>
  </function>
</mycat:rule>

配置虚拟库及虚拟表(schema.xml)

备份原有虚拟库文件schema.xml后,将整个schema.xml改写成如下内容:


<?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="test_tbl" dataNode="dn00,dn01,dn02" rule="cicular_month_rule" />
  </schema>

  <dataNode name="dn00" dataHost="dh00" database="mycat00" />
  <dataNode name="dn01" dataHost="dh00" database="mycat01" />
  <dataNode name="dn02" dataHost="dh00" database="mycat02" />

  <dataHost name="dh00"
    dbType="mysql" dbDriver="native"
    maxCon="9" minCon="1" balance="0" switchType="0">
    <heartbeat>select 1</heartbeat>
    <writeHost host="host00"
      url="192.168.35.125:3306" user="root" password="root" />
  </dataHost>
</mycat:schema>

配置MyCat服务信息(server.xml及myid.properties)

备份原有服务器配置文件server.xml后,将整个server.xml改写成如下内容:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">

  <system>
    <property name="useSqlStat">0</property>
    <property name="useGlobleTableCheck">0</property>
    <property name="sequnceHandlerType">2</property>
    <property name="processorBufferPoolType">0</property>
    <property name="handleDistributedTransactions">0</property>
    <property name="useOffHeapForMerge">1</property>
    <property name="memoryPageSize">1m</property>
    <property name="spillsFileBufferSize">1k</property>
    <property name="useStreamOutput">0</property>
    <property name="systemReserveMemorySize">384m</property>
    <property name="useZKSwitch">false</property>
    <property name="serverPort">8066</property>
    <property name="managerPort">9066</property>
  </system>

  <user name="mycat_root">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
  </user>

  <user name="user">
    <property name="password">user</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
  </user>

</mycat:server>

备份原有ZooKeeper连接文件myid.properties后,将整个myid.properties改写成如下内容:


loadZk=false
zkURL=192.168.35.121:2181,192.168.35.123:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterNodes=mycat_fz_01,mycat_fz_02
type=server
boosterDataHosts=dn00,dn01,dn02

部署结果

启动MyCat

确认MySQL数据节点(192.168.35.125)正常运作后,在MyCat节点(192.168.35.121)上,以操作系统用户root执行以下命令,启动MyCat。


sudo -u mysql /usr/local/mycat/bin/mycat start

MyCat虚拟库访问测试

在MySQL数据节点(192.168.35.125)上,使用如下语句打开到MyCat的连接


mysql -h192.168.35.121 -P8066 -umycat_root -p123456

  • 查询

    使用到MyCat的连接,执行以下SQL,查询虚拟表TESTDB.test_tbl的所有内容。


USE TESTDB
SELECT * FROM test_tbl;

屏幕显示如下,标志着我们已经可以通过访问虚拟表TESTDB.test_tbl,来获取分布在不同物理库mycat00、mycat01和mycat02里的同名物理表test_tbl的所有数据。


+----+---------------------+
| id | date                |
+----+---------------------+
|  0 | 2000-01-01 00:00:00 |
|  2 | 2000-03-01 00:00:00 |
|  1 | 2000-02-01 00:00:00 |
+----+---------------------+
3 rows in set (0.01 sec)

  • 增删改

    使用到MyCat的连接,执行以下SQL,进行以下操作:

  1. 插入1999年、2000年4月后的合计6条记录;

  2. 删除原始数据(2000年1月~3月的3条记录);

  3. 修改新插入的2000年4月后的三条记录,让它们的id列变成3位数;

  4. 查询虚拟表TESTDB.test_tbl这时候有的所有记录。


USE TESTDB

INSERT INTO test_tbl(id,date)
VALUES (3,'1999-10-01');
INSERT INTO test_tbl(id,date)
VALUES (4,'1999-11-01');
INSERT INTO test_tbl(id,date)
VALUES (5,'1999-12-01');

INSERT INTO test_tbl(id,date)
VALUES (6,'2000-04-01');
INSERT INTO test_tbl(id,date)
VALUES (7,'2000-05-01');
INSERT INTO test_tbl(id,date)
VALUES (8,'2000-06-01');

DELETE FROM test_tbl
WHERE date BETWEEN
'2000-01-01' AND '2000-03-01';

UPDATE test_tbl
SET id=id+100
WHERE date > '2000-01-01';

SELECT * FROM test_tbl;

屏幕最后会显示如下内容。我们已经可以通过虚拟表TESTDB.test_tbl进行增删改操作了。


+-----+---------------------+
| id  | date                |
+-----+---------------------+
|   3 | 1999-10-05 00:00:00 |
| 106 | 2000-04-01 00:00:00 |
|   4 | 1999-11-05 00:00:00 |
| 107 | 2000-05-01 00:00:00 |
|   5 | 1999-12-05 00:00:00 |
| 108 | 2000-06-01 00:00:00 |
+-----+---------------------+
6 rows in set (0.02 sec)

MySQL物理库检查

在MySQL数据节点(192.168.35.125)上,使用如下语句打开到MySQL物理库的连接,查看各个物理库的内容。


mysql -h192.168.35.125 -P3306 -uroot -proot -e"
SELECT 'mycat00',id,date 
FROM mycat00.test_tbl;

SELECT 'mycat01',id,date 
FROM mycat01.test_tbl;

SELECT 'mycat02',id,date 
FROM mycat02.test_tbl;
"

屏幕最后会显示如下内容。我们设置的分片路由规则起了效果,增删改的操作反映到了对应的物理库中。


+---------+-----+---------------------+
| mycat00 | id  | date                |
+---------+-----+---------------------+
| mycat00 |   3 | 1999-10-05 00:00:00 |
| mycat00 | 106 | 2000-04-01 00:00:00 |
+---------+-----+---------------------+
+---------+-----+---------------------+
| mycat01 | id  | date                |
+---------+-----+---------------------+
| mycat01 |   4 | 1999-11-05 00:00:00 |
| mycat01 | 107 | 2000-05-01 00:00:00 |
+---------+-----+---------------------+
+---------+-----+---------------------+
| mycat02 | id  | date                |
+---------+-----+---------------------+
| mycat02 |   5 | 1999-12-05 00:00:00 |
| mycat02 | 108 | 2000-06-01 00:00:00 |
+---------+-----+---------------------+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 传统关系型数据库的分布式开发通常需要自己做,不仅耗时耗力而且效果不是很理想,当想快速搭建时,最初想到的是看有没有第...
    欢醉阅读 2,379评论 0 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • 【分布式架构初探】 第五节-猫从哪里来,要到哪里去(Mycat的前世今生) 5.1 MyCAT猫的前世### 最近...
    小张哥哥阅读 2,842评论 1 27
  • 本来以为只是单纯的平底走路 结果是玩命的爬山+不间断的走路 很佩服这位法国领队 是一个上了年纪的漂亮女士 她还创造...
    Jiujiumeir_阅读 256评论 0 1