Mycat2 入門

2022-04-26 15:01 更新

發(fā)現(xiàn)一些用戶有個普遍認(rèn)知:分庫分表配置繁瑣,而且需要大量文檔來描述配置。這個認(rèn)知是錯誤的

本文僅描述最核心的內(nèi)容:

  1. 啟動服務(wù)
  2. 添加數(shù)據(jù)源(2個SQL)
  3. 添加集群(1個SQL)
  4. 學(xué)會建庫(1個SQL)
  5. 學(xué)會創(chuàng)建單表、分片表、全局表(3個SQL)

入門 Mycat2

右側(cè)的MySQLMycat2的配置里面叫做prototype,專門用來響應(yīng)兼容性SQL系統(tǒng)表SQL。

什么是兼容性SQL?

客戶端或者所在應(yīng)用框架運行所需必須的SQL,但是用戶一般接觸不到,它們會影響客戶端的啟動和運行。而Mycat2對于這種SQL盡可能不影響用戶使用。

什么是prototype服務(wù)器?

分庫分表中間件中用于處理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é)點。

入門(按順序把下面的SQL在客戶端執(zhí)行一遍)

前提:

準(zhǔn)備兩個 MySQL 服務(wù)器(prototype 服務(wù)器)
端口:3306,3307
用戶名:root
密碼:123456
Mycat2的jar包。

Mycat服務(wù)器級別配置

保證配置文件由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 即可。

創(chuàng)建庫:

CREATE DATABASE db1

該語句執(zhí)行兩個操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL

Mycat可以在控制臺操作。

切換邏輯庫:

USE `db1`;

該語句執(zhí)行兩個操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL

刪除邏輯庫:

DROP DATABASE db1

該語句執(zhí)行兩個操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL

創(chuàng)建單表:

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í)行兩個操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL

使用注釋動態(tài)配置 Mycat 如果使用 MySQL 官方客戶端添加 -c 參數(shù)避免客戶端過濾注釋。

添加存儲數(shù)據(jù)庫:

/*+ 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í)行兩個操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL,而不會在其他存儲節(jié)點執(zhí)行。

創(chuàng)建全局表:

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í)行操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL。
  3. 根據(jù)當(dāng)前集群名字首字母為c的集群納入到全局表的存儲節(jié)點中。
  4. 根據(jù)存儲節(jié)點信息建立物理庫、物理表。

創(chuàng)建分片表:

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í)行操作:

  1. 更改 mycat 的整個庫配置。
  2. 在 prototype 服務(wù)器執(zhí)行此 SQL。
  3. 根據(jù)當(dāng)前集群名字首字母為c的集群納入到分片表的存儲節(jié)點中。
  4. 根據(jù)存儲節(jié)點信息建立物理庫、物理表。

默認(rèn)分片表的自增序列是雪花算法。

顯示存儲節(jié)點:

/*+ 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{} */;
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號