W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
發(fā)現(xiàn)一些用戶有個普遍認(rèn)知:分庫分表配置繁瑣,而且需要大量文檔來描述配置。這個認(rèn)知是錯誤的!
本文僅描述最核心的內(nèi)容:
右側(cè)的MySQL
在Mycat2
的配置里面叫做prototype
,專門用來響應(yīng)兼容性SQL和系統(tǒng)表SQL。
客戶端或者所在應(yīng)用框架運行所需必須的SQL,但是用戶一般接觸不到,它們會影響客戶端的啟動和運行。而Mycat2對于這種SQL盡可能不影響用戶使用。
分庫分表中間件中用于處理MySQL的兼容性SQL和系統(tǒng)表SQL的服務(wù)器,這個配置項可以指向一個服務(wù)器,也可以是一個集群,Mycat依賴它處理非select
,insert
,update
,delete
語句。當(dāng)這個服務(wù)器是與第一個存儲節(jié)點是同一個服務(wù)器/集群的時候,我們一般把它稱之為0號節(jié)點。
prototype.cluster.json
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"prototypeDs"
],
"maxCon":200,
"name":"prototype",
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH"
}
當(dāng)需要進行數(shù)據(jù)分片的時候,通過擴展存儲節(jié)點。
準(zhǔn)備兩個 MySQL 服務(wù)器(prototype 服務(wù)器)
端口:3306
,3307
用戶名:root
密碼:123456
Mycat2
的jar包。
保證配置文件由server.json
,內(nèi)容至少是:
{
"server":{
"ip":"127.0.0.1",
"mycatId":1,
"port":8066,
"serverVersion": "5.7.33-mycat-2.0" //注意設(shè)置模擬的MySQL版本,與后端,客戶端版本對應(yīng)
}
}
啟動請參考文檔安裝與啟動
啟動的過程中,Mycat會在配置文件夾生成默認(rèn)配置,加載上述的MySQL中的系統(tǒng)表,并建立用戶名為root
,密碼為123456
。
此時使用客戶端登錄 Mycat 即可。
CREATE DATABASE db1
該語句執(zhí)行兩個操作:
Mycat可以在控制臺操作。
USE `db1`;
該語句執(zhí)行兩個操作:
DROP DATABASE db1
該語句執(zhí)行兩個操作:
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建表語句執(zhí)行兩個操作:
使用注釋動態(tài)配置 Mycat
如果使用 MySQL 官方客戶端添加 -c
參數(shù)避免客戶端過濾注釋。
/*+ mycat:createDataSource{
"name":"dw0",
"url":"jdbc:mysql://127.0.0.1:3306",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dr0",
"url":"jdbc:mysql://127.0.0.1:3306",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dw1",
"url":"jdbc:mysql://127.0.0.1:3307",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dr1",
"url":"jdbc:mysql://127.0.0.1:3307",
"user":"root",
"password":"123456"
} */;
/*! mycat:createCluster{"name":"c0","masters":["dw0"],"replicas":["dr0"]} */;
/*! mycat:createCluster{"name":"c1","masters":["dw1"],"replicas":["dr1"]} */;
drop table db1.travelrecord
刪除語句執(zhí)行兩個操作:
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 BROADCAST;
建全局表語句執(zhí)行操作:
c
的集群納入到全局表的存儲節(jié)點中。CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 2 dbpartitions 2;
建分片表語句執(zhí)行操作:
c
的集群納入到分片表的存儲節(jié)點中。默認(rèn)分片表的自增序列是雪花算法。
/*+ mycat:showDataNodes{//1.18前
"schemaName":"db1",
"tableName":"normal"
} */;
/*+ mycat:showTopology{//1.18后
"schemaName":"db1",
"tableName":"normal"
} */;
上述的原型庫與c0
實際上是同一個數(shù)據(jù)庫使用創(chuàng)建了兩個數(shù)據(jù)源進行連接。
由于直接更改本地配置比較繁瑣,所以 mycat2 實現(xiàn)了使用注解來更改配置,可以把注解攜程腳本,在客戶端導(dǎo)入此腳本就可以,Mycat2 支持多語句執(zhí)行。
通過注釋配置。
如果物理表不存在,在 mycat2 能正常啟動的情況下,根據(jù)當(dāng)前配置自動創(chuàng)建分片表,全局表的物理表(但不自動創(chuàng)建單表的物理表)。
/*+ mycat:repairPhysicalTable{} */;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: