MyCat之路 | Mysql分片的配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liupeifeng3514/article/details/82797417

需求及环境分析


1、需求

把 tb_item 表分片存储到三个数据节点上。

2、安装环境分析

一台 mycat服务器:

  • mycat-server:10.73.150.4

两台 mysql 数据库服务器:

  • mysql-server-01:10.73.150.54
  • 数据库名 : db1、db3
  • mysql-server-02:10.73.150.197
  • 数据库名 : db2

一、安装相关的软件


Mysql 的安装请参考:MySql 服务器的安装与配置(解压安装方式)
MyCat的安装请参考:MyCat 之路 | Linux 下的安装配置

二、配置三台服务器的 /etc/hosts 文件


三台服务器的 /etc/hosts 文件保持一致,以其中一台服务器为例:

[root@mycat-server ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.73.150.4   mycat-server
10.73.150.54  mysql-server-01
10.73.150.197 mysql-server-02

三、配置 MyCat 服务器


配置 /usr/local/mycat/conf/schema.xml
[root@mycat-server conf]# vim schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="small" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="mysql-server-01:3306" user="root" password="888888">
                        <!-- can have multi read hosts -->
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="mysql-server-02:3306" user="root" password="888888">
                        <!-- can have multi read hosts -->
                </writeHost>
        </dataHost>
</mycat:schema>
配置 /usr/local/mycat/conf/server.xml
[root@mycat-server conf]# vim server.xml

<user name="root">
        <property name="password">123456</property>
        <property name="schemas">small</property>
</user>

四、启动服务器

1、先启动两台 Mysql 服务器

[root@mysql-server-01 bin]# service mysqld start
Starting MySQL... SUCCESS! 
[root@mysql-server-01 bin]# service mysqld status
 SUCCESS! MySQL running (104755)

2、在启动 MyCat 服务器

[root@mycat-server conf]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...

3、查看 MyCat 服务器是否启动成功

tail -500 /usr/local/mycat/logs/mycat.log 

在这里插入图片描述

在这里插入图片描述

注意:若是Linux版本的Mysql,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。

扫描二维码关注公众号,回复: 3273052 查看本文章

在MySQL的配置文件中/etc/my.cnf 的 [mysqld] 中增加一行

lower_case_table_names=1

五、进行测试


1、我们使用 Navicat 连接MyCat服务器

在这里插入图片描述

在这里插入图片描述

2、创建表

执行如下建表语句,执行之后可以看到数据库 db1,db2,db3 下都创建了 tb_item 表(开始时是不存在任何表的)。

CREATE TABLE `tb_item` (
  `id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',
  `title` varchar(100) NOT NULL COMMENT '商品标题',
  `sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',
  `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
  `num` int(10) NOT NULL COMMENT '库存数量',
  `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
  `image` varchar(500) DEFAULT NULL COMMENT '商品图片',
  `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',
  `created` datetime NOT NULL COMMENT '创建时间',
  `updated` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  KEY `status` (`status`),
  KEY `updated` (`updated`)
) COMMENT='商品表';
3、插入数据

执行以下脚本观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('536563', 'new2 - 阿尔卡特 (OT-927) 炭黑 联通3G手机 双卡双待', '清仓!仅北京,武汉仓有货!', '29900000', '99999', '', 'http://image.taotao.com/jd/4ef8861cf6854de9889f3db9b24dc371.jpg', '560', '1', '2015-03-08 21:33:18', '2015-04-11 20:38:38');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('562379', 'new8- 三星 W999 黑色 电信3G手机 双卡双待双通', '下单送12000毫安移动电源!双3.5英寸魔焕炫屏,以非凡视野纵观天下时局,尊崇翻盖设计,张弛中,尽显从容气度!', '1100', '99999', '', 'http://image.taotao.com/jd/d2ac340e728d4c6181e763e772a9944a.jpg', '560', '1', '2015-03-08 21:27:54', '2015-04-12 17:10:43');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('605616', '阿尔卡特 (OT-979) 冰川白 联通3G手机', '清仓!仅上海仓有货!', '30900', '99999', null, 'http://image.taotao.com/jd/a69d0d09a1a04164969c2d0369659b1a.jpg', '560', '1', '2015-03-08 21:33:18', '2015-03-08 21:33:18');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('635906', '阿尔卡特 (OT-927) 单电版 炭黑 联通3G手机 双卡双待', '清仓!仅北京,武汉仓有货!', '24900', '99999', null, 'http://image.taotao.com/jd/9c1fcdf2bf20450788195c707da00a87.jpg', '560', '1', '2015-03-08 21:33:18', '2015-03-08 21:33:18');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('679532', '阿尔卡特 (OT-986+) 玫红 AK47 加强版 联通3G手机', '仅上海,广州,沈阳仓有货!预购从速!', '49900', '99999', null, 'http://image.taotao.com/jd/65e2007d41dc4e3cb308833a1a910f8d.jpg', '560', '1', '2015-03-08 21:32:31', '2015-03-08 21:32:31');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('679533', '阿尔卡特 (OT-986+) 曜石黑 AK47 加强版 联通3G手机', '少量库存,抢完即止!<a  target=\"blank\"  href=\"http://sale.jd.com/act/bxYeI1346g.html?erpad_source=erpad\">“领券更优惠!”</a>', '49900', '99999', null, 'http://image.taotao.com/jd/b3251c85da8e4302b7389f3371dd0a68.jpg', '560', '1', '2015-03-08 21:31:36', '2015-03-08 21:31:36');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('691300', '三星 B9120 钛灰色 联通3G手机 双卡双待双通', '下单即送10400毫安移动电源!再赠手机魔法盒!', '439900', '99999', null, 'http://image.taotao.com/jd/c1775819c7e44b1c903f27514e70b998.jpg', '560', '1', '2015-03-08 21:29:27', '2015-03-08 21:29:27');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('738388', '三星 Note II (N7100) 云石白 联通3G手机', '经典回顾!超值价格值得拥有。', '169900', '99999', null, 'http://image.taotao.com/jd/089b79cbe19f454dab24cce65f2e9602.jpg', '560', '1', '2015-03-08 21:28:16', '2015-03-08 21:28:16');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('741524', '三星 Note II (N7100) 钛金灰 联通3G手机', '下单赠12000毫安移动电源', '169900', '99999', null, 'http://image.taotao.com/jd/29e1b92dc7e146489ce46a2262479a0f.jpg', '560', '1', '2015-03-08 21:28:30', '2015-03-08 21:28:30');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('816448', '三星 Note II (N7100) 钻石粉 联通3G手机', '经典回顾!超值特惠!', '169900', '99999', null, 'http://image.taotao.com/jd/5a45e88aeca046ec88d7b7ffbc47092a.jpg', '560', '1', '2015-03-08 21:28:44', '2015-03-08 21:28:44');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('816753', '夏普(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278686.html\">还有升级版安卓智能新机46DS52供您选择!</a>', '379900', '99999', null, 'http://image.taotao.com/jd/2e45ff47f2e7424cb6d95fb9f05151bd.jpg', '76', '1', '2015-03-08 21:27:39', '2015-03-08 21:27:39');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('830972', '飞利浦 老人手机 (X2560) 深情蓝 移动联通2G手机 双卡双待', '赠:九安血压计+8G内存!超长待机,关爱无限,更好用!飞利浦简单健康老人手机!外观圆滑,手感极佳!', '48900', '99999', null, 'http://image.taotao.com/jd/4f1d41baa6c84219a622f20a4f1c32bb.jpg', '560', '1', '2015-03-08 21:28:30', '2015-03-08 21:28:30');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('832739', '中兴 U288 珠光白 移动3G手机', '好评过万!超大彩屏,超大字体,超大按键,超大音量,一键SOS紧急呼叫 !', '19900', '99999', null, 'http://image.taotao.com/jd/4021f8a1ffcc4ae2a313c2012d9f35c8.jpg', '560', '1', '2015-03-08 21:28:44', '2015-03-08 21:28:44');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('844022', '三星 SCH-W899 亮金色 电信3G手机 双卡双待双通', '双3.3英寸魔焕炫屏,CG双网双待,臻尊体验,心系天下!', '299900', '99999', null, 'http://image.taotao.com/jd/e638243d8341474293be09ad157546b8.jpg', '560', '1', '2015-03-08 21:28:01', '2015-03-08 21:28:01');
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('847276', '飞利浦 老人手机 (X2560) 喜庆红 移动联通2G手机 双卡双待', '超长待机,关爱无限,更好用!飞利浦简单健康老人手机!外观圆滑,手感极佳!', '48900', '99999', null, 'http://image.taotao.com/jd/657c61e5018043f89d9fe0f9a1519884.jpg', '560', '1', '2015-03-08 21:28:30', '2015-03-08 21:28:30');

再执行以下脚本,观察一下数据库的变化(id 不同):

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('5000000', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

再执行以下脚本,观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('5000001', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

再执行以下脚本,观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('10000000', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

再执行以下脚本,观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('10000001', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

再执行以下脚本,观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('15000000', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

再执行以下脚本,观察一下数据库的变化:

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('15000001', '夏普(SHARP)LCD-52DS51A 52英寸 日本原装液晶面板 内置WIFI智能全高清液晶电视', '要好屏,选夏普!日本原装面板,智能电视,高画质高音质!<a  target=\"blank\"  href=\"http://item.jd.com/1278664.html\">还有升级版安卓智能新机52DS52供您选择!</a>', '549900', '99999', null, 'http://image.taotao.com/jd/63af01c37a18454ab2fef4670046272e.jpg', '76', '1', '2015-03-08 21:27:45', '2015-03-08 21:27:45');

发现执行最后一条语句的时候发生了错误。

由于配置的分片规则为“auto-sharding-long”,所以mycat会根据此规则自动分片。每个datanode中保存一定数量的数据。根据id进行分片,经测试id范围为:

  • Datanode1:1~5000000
  • Datanode2:5000000~10000000
  • Datanode3:10000001~15000000

当15000000以上的id插入时报错:

[Err] 1064 - can't find any valid datanode :TB_ITEM -> ID -> 15000001

此时需要添加节点了。

附、配置过程中的问题


查看启动成功的另一种方式
# 一前端控制体的方式启动,日志会打印在窗口上
[root@mycat-server conf]# /usr/local/mycat/bin/mycat console

可以看到如下启动成功的信息:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liupeifeng3514/article/details/82797417