MyCat数据库分片
水平分片
采用橫向切割
把商品表分片,存儲到三個數(shù)據(jù)節(jié)點上
數(shù)據(jù)節(jié)點
每一個數(shù)據(jù)節(jié)點,就是一個數(shù)據(jù)庫
每一個數(shù)據(jù)庫,就是一個數(shù)據(jù)節(jié)點
一個mysql實例上,可以有多個數(shù)據(jù)庫
數(shù)據(jù)庫版本 : mysql-5.6
節(jié)點1、3
ip:192.168.25.134
數(shù)據(jù)庫名 : db1、db3
節(jié)點2
ip:192.168.25.166
數(shù)據(jù)庫名 : db2
Mycat安裝
可以單獨安裝一臺服務(wù)器
也可以安裝到某一個節(jié)點上
這里,安裝到節(jié)點1上
配置schema.xml
Schema.xml作為MyCat中重要的配置文件之一
管理著MyCat的邏輯庫、表、分片規(guī)則、DataNode以及DataSource
Schema標(biāo)簽
用于定義MyCat實例中的邏輯庫
Table標(biāo)簽
定義了MyCat中的邏輯表
dataNode標(biāo)簽
定義了MyCat中的數(shù)據(jù)節(jié)點
也就是我們通常說所的數(shù)據(jù)分片
dataHost標(biāo)簽
在mycat邏輯庫中也是作為最底層的標(biāo)簽存在
直接定義了具體的數(shù)據(jù)庫實例、讀寫分離配置和心跳語句
注意
Linux下,mysql默認(rèn)區(qū)分大小寫
設(shè)置不區(qū)分大小寫,在MySQL的配置文件中my.ini中添加
lower_case_table_names = 1
配置信息
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><!-- auto sharding by id (long) --><table name="TB_ITEM" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /><table name="TB_USER" primaryKey="ID" type="global" dataNode="dn1,dn2" /></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="192.168.25.134:3306" user="root"password="root"><!-- 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="192.168.25.166:3306" user="root"password="root"><!-- can have multi read hosts --></writeHost></dataHost> </mycat:schema>schema,一個數(shù)據(jù)庫
table,一個數(shù)據(jù)表,存放到三個數(shù)據(jù)節(jié)點
DataNode,一個數(shù)據(jù)節(jié)點,對應(yīng)一個數(shù)據(jù)庫
dataHost,一個數(shù)據(jù)節(jié)點,對應(yīng)一個dataHost
配置server.xml
保存mycat需要的系統(tǒng)配置信息
最常用的配置用戶名、密碼及權(quán)限
配置信息
<user name="test"><property name="password">test</property><property name="schemas">TESTDB</property><property name="readOnly">true</property> </user>配置rule.xml
rule.xml里面就定義了我們對表進行拆分所涉及到的規(guī)則定義
可以靈活的對表使用不同的分片算法
或者對表使用相同的算法但具體的參數(shù)不同。
這個文件里面主要有tableRule和function這兩個標(biāo)簽
在具體使用過程中,可以按照需求添加tableRule和function
這里,此配置文件可以不用修改,使用默認(rèn)即可
創(chuàng)建表
配置完畢后,重新啟動mycat
使用mysql客戶端連接mycat,創(chuàng)建表
商品表
DROP TABLE IF EXISTS `tb_item`; CREATE TABLE `tb_item` (`id` bigint(20) NOT NULL COMMENT '商品id,同時也是商品編號',`title` varchar(100) NOT NULL COMMENT '商品標(biāo)題',`sell_point` varchar(500) DEFAULT NULL COMMENT '商品賣點',`price` bigint(20) NOT NULL COMMENT '商品價格,單位為:分',`num` int(10) NOT NULL COMMENT '庫存數(shù)量',`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 '商品狀態(tài),1-正常,2-下架,3-刪除',`created` datetime NOT NULL COMMENT '創(chuàng)建時間',`updated` datetime NOT NULL COMMENT '更新時間',PRIMARY KEY (`id`),KEY `cid` (`cid`),KEY `status` (`status`),KEY `updated` (`updated`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';插入數(shù)據(jù)
INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('1', 'new2 - 阿爾卡特 (OT-927) 炭黑 聯(lián)通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 ('5000000', 'new8- 三星 W999 黑色 電信3G手機 雙卡雙待雙通', '下單送12000毫安移動電源!雙3.5英寸魔煥炫屏,以非凡視野縱觀天下時局,尊崇翻蓋設(shè)計,張弛中,盡顯從容氣度!', '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 ('5000001', '阿爾卡特 (OT-979) 冰川白 聯(lián)通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 ('10000000', '阿爾卡特 (OT-927) 單電版 炭黑 聯(lián)通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 ('10000001', '阿爾卡特 (OT-986+) 玫紅 AK47 加強版 聯(lián)通3G手機', '僅上海,廣州,沈陽倉有貨!預(yù)購從速!', '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 ('15000000', '阿爾卡特 (OT-986+) 曜石黑 AK47 加強版 聯(lián)通3G手機', '少量庫存,搶完即止!<a target=\"blank\" href=\"http://sale.jd.com/act/bxYeI1346g.html?erpad_source=erpad\">“領(lǐng)券更優(yōu)惠!”</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 ('15000001', '三星 B9120 鈦灰色 聯(lián)通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');分片測試
配置的分片規(guī)則為“auto-sharding-long”
mycat會根據(jù)此規(guī)則自動分片
每個datanode中保存一定數(shù)量的數(shù)據(jù)
根據(jù)長整型id進行分片
測試結(jié)果
Datanode1:1~5000000
Datanode2:5000000~10000000
Datanode3:10000001~15000000
當(dāng)15000000以上的id插入時報錯
[Err] 1064 - can’t find any valid datanode :TB_ITEM -> ID -> 15000001
解決方法
需要添加節(jié)點,存儲更多的數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的MyCat数据库分片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。