日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MyCat数据库分片

發布時間:2025/3/20 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyCat数据库分片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

水平分片

采用橫向切割
把商品表分片,存儲到三個數據節點上

數據節點
每一個數據節點,就是一個數據庫
每一個數據庫,就是一個數據節點

一個mysql實例上,可以有多個數據庫
數據庫版本 : mysql-5.6

節點1、3
ip:192.168.25.134
數據庫名 : db1、db3

節點2
ip:192.168.25.166
數據庫名 : db2

Mycat安裝

可以單獨安裝一臺服務器
也可以安裝到某一個節點上
這里,安裝到節點1上

配置schema.xml

Schema.xml作為MyCat中重要的配置文件之一
管理著MyCat的邏輯庫、表、分片規則、DataNode以及DataSource

Schema標簽
用于定義MyCat實例中的邏輯庫

Table標簽
定義了MyCat中的邏輯表

dataNode標簽
定義了MyCat中的數據節點
也就是我們通常說所的數據分片

dataHost標簽
在mycat邏輯庫中也是作為最底層的標簽存在
直接定義了具體的數據庫實例、讀寫分離配置和心跳語句

注意

Linux下,mysql默認區分大小寫
設置不區分大小寫,在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,一個數據庫
table,一個數據表,存放到三個數據節點
DataNode,一個數據節點,對應一個數據庫
dataHost,一個數據節點,對應一個dataHost

配置server.xml

保存mycat需要的系統配置信息
最常用的配置用戶名、密碼及權限

配置信息

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

配置rule.xml

rule.xml里面就定義了我們對表進行拆分所涉及到的規則定義
可以靈活的對表使用不同的分片算法
或者對表使用相同的算法但具體的參數不同。

這個文件里面主要有tableRule和function這兩個標簽
在具體使用過程中,可以按照需求添加tableRule和function
這里,此配置文件可以不用修改,使用默認即可

創建表
配置完畢后,重新啟動mycat
使用mysql客戶端連接mycat,創建表

商品表

DROP TABLE IF EXISTS `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`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

插入數據

INSERT INTO TB_ITEM(ID,TITLE,SELL_POINT,PRICE,NUM,BARCODE,IMAGE,CID,STATUS,CREATED,UPDATED) VALUES ('1', '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 ('5000000', '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 ('5000001', '阿爾卡特 (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 ('10000000', '阿爾卡特 (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 ('10000001', '阿爾卡特 (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 ('15000000', '阿爾卡特 (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 ('15000001', '三星 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');

分片測試

配置的分片規則為“auto-sharding-long”
mycat會根據此規則自動分片

每個datanode中保存一定數量的數據
根據長整型id進行分片

測試結果
Datanode1:1~5000000
Datanode2:5000000~10000000
Datanode3:10000001~15000000

當15000000以上的id插入時報錯
[Err] 1064 - can’t find any valid datanode :TB_ITEM -> ID -> 15000001

解決方法
需要添加節點,存儲更多的數據

總結

以上是生活随笔為你收集整理的MyCat数据库分片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。