新四季網

一文看懂mycat(那些年非常火的MyCAT是什麼)

2023-09-22 18:03:40

什麼是 MyCAT ?樂字節老師問過我這麼一個問題

根據 MyCAT 官網 - http://mycat.io/ 的描述可以知道, MyCAT 是如下的一個東東:

一個徹底開源的,面向企業應用開發的大資料庫集支持事務、ACID、可以替代MySQL的加強版資料庫一個可以視為MySQL集群的企業級資料庫,用來替代昂貴的Oracle集群一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server結合傳統資料庫和新型分布式數據倉庫的新一代企業級資料庫產品一個新穎的資料庫中間件產品

總結一下就是: MyCAT 是一款資料庫中間件,類似於Tomcat 容器或者相關的 Web 中間件。它主要用於解決資料庫相關的問題。

MyCAT 能幹什麼?為什麼要使用它?使用它可以解決什麼問題?用於支持海量數據存儲,對海量數據進行分庫分表支持分庫分表場景下的分布式事務對多個數據源進行統一整合高並發應用場景下,降低請求對單個資料庫節點帶來的災難性壓力可以通過資料庫中間間層面實現資料庫讀寫分離,使其Java程序與資料庫訪問解耦

具體更多的特性可以參考 http://mycat.io/ 對MyCAT 特性的介紹。總結下來的一般常用的用途有3個,分別如下:

數據讀寫分離 數據分片 多數據源整合 MyCAT 是唯一的資料庫分庫分表的解決方案嗎?與其它的資料庫中間件有什麼區別?

我們來看如下圖,圖片來源於網絡:

具體介紹如下:

Cobar 屬於阿里 B2B 事業群,始於 2008 年,在阿里服役 3 年多,接管 3000 個 MySQL 資料庫的 schema,

集 群日處理在線 SQL 請求 50 億次以上。由於 Cobar 發 起人的離職, Cobar 停止維護。

My cat 是開源社區在阿里 cobar 基礎上進行二次開發,解決了 cobar 存在的問題,並且加入了許多新

的功能在其中。青出於藍而勝於藍。

OneProxy 基於 MySQL 官方的 proxy 思想利用 c 進行開發的, OneProxy 是一款商業收費的中間件。舍

棄了一些功能,專注在性能和穩定性上。

kingshard 由小團隊用 go 語言開發,還需要發展,需要不斷完善 。Vite ss 是 Youtube 生產在使用 架構很複雜。不支持 MySQL 原生協議,使用需要大量改造成本 。Atlas 是 3 60 團隊基於 mysql proxy 改寫 ,功能還需完善 ,高並發下不穩定 。MaxScale 是 mariadb MySQL 原作者維護的一個版本 研發的中間件MySQLRout e 是 MySQL 官方 Oracle 公司發布的中間件

除了這些之外,我們去github 搜羅了一下,還有如下的一些資料庫中間件:

Oceanus - 58同城資料庫中間件,github star 數 500 ;sohu-DBProxy - 是由 搜狐 資料庫團隊開發維護的一個基於MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.3版本的基礎上, 修改了大量bug,添加了很多功能特性。現在已經在sohu的多個業務線上使用, github star 數 700 ;Cetus是由C語言開發的關係型資料庫MySQL的中間件,主要提供了一個全面的資料庫訪問代理功能。Cetus連接方式與MySQL基本兼容,應用程式幾乎不用修改即可通過Cetus訪問資料庫,實現了資料庫層的水平擴展和高可用。 , github star 數 1000 ;Zebra是一個基於JDBC API協議上開發出的高可用、高性能的資料庫訪問層解決方案,是美團點評內部使用的資料庫訪問層中間件。github star 數 1500 ;MyCAT作為分庫分表中間件的原理是什麼?

Mycat收到一條SQL語句時, 首先解析SQL語句涉及的表, 接著查看此表的定義, 如果該表存在分片規則, 則獲取SQL語句裡分片欄位的值, 並匹配分片函數, 得到該SQL語旬對應的分片列表, 然後將SQL語句發送到相應的分片去執行, 最後處理所有分片返回的數據並返回給客戶端。 以 select* from Orders where prov=? 語句為例, 查找prov=wuhan, 按照分片函數, wuhan值存放在dnl上, 於是SQL語句被發送到Mysql l , 把DBI上的查詢結果返回給用戶。 這裡使用過阿里巴巴數據源 Druid 的同學不知道有沒有發現,在Druid 中有一個叫做 SQLParser 的東東,這個玩意其實就是可以用來對原始的SQL語句,根據SQL語法樹,對SQL進行加強改造的一個解析器,如果你們項目中有做過表數據的行權限或者列權限,則用這個Druid 的SQLParser 對所有的SQL 進行攔截改寫是一個不錯的方案,我之前在做數據權限的時候,參考相關實現時,也發現了MyCAT 中對於SQL的解析和改寫也使用的這個,具體可以參考:https://github.com/MyCATApache/Mycat-Server/blob/f929f96a16852869bc9dc63f4c0f192ee02818e0/src/main/java/io/mycat/statistic/stat/UserSqlHighStat.java

MyCAT 入門

對於一款開箱即用的資料庫分庫分表中間件來說,MyCAT的入門相對簡單,只需要按照官方的入門指導一步步往下走即可。

安裝

安裝之前我們首先準備環境,這裡我們以企業中生產使用最多的Centos 7 為示例,進行下面的實操,本次CentOS 7 的內核版本如下:

Linux VM_0_14_centos 3.10.0-862.el7.x86_64

由於 MyCAT 源碼是通過 Java 語言進行開發的,因此在我們使用之前,需要先檢查自己的CentOS 7 主機具備不具備Java 環境,使用 Java-version 進行驗證,如果沒有安裝JDK,則首先需要安裝JDK並且配置Java環境變量才闊以,Centos 7 安裝Java8 比較容易,只需要如下一行命令即可:

yum -y install java-1.8.0-openjdk

JDK8 安裝完畢之後,進行如下驗證,沒有錯誤即可:

java -version

openjdk version "1.8.0_242"OpenJDK Runtime Environment (build 1.8.0_242-b08)OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

接下來我們根據官方的入門指導,下載mycat server 包,下載地址為:http://dl.mycat.io/ , 這裡我們實驗時使用MyCAT 1.6.7.3 release 版本即可,下載 1.6.7.3 release 安裝包到自己主機的 /opt 目錄下 , 操作命令如下:

cd /opt/ && wget /usr/local/ http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

下載完成之後,我們對mycat 安裝包進行解壓即可,命令如下:

tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

解壓完成之後,我們看到 /opt 目錄下有了一個 mycat 目錄,我們進入到該目錄下,發現它的子目錄主要有如下:

.├── bin├── catlet├── conf├── lib├── logs├── tmlogs└── version.txt

這裡我們進入到conf 目錄下,只關注如下的幾個配置文件即可,其它的配置文件先不用關心:

server.xml 定義邏輯庫,表、分片節點等內容schema.xml 定義用戶以及系統相關變量,如埠等

修改相關配置

為了對用戶進行區分,此時,我們先修改 server.xml 中的 root 用戶為 mycat,當使用 mycat 用戶連接時,就代表我們直連的是 mycat,其它的配置不動,具體修改如下:

... 123456 TESTDB <!-- --> ...

接下來我們修改 schema.xml

刪除 標籤間的 表信息 dataNode 標籤只留一個 dataHost 標籤只留一個 writeHost

select user

其中

啟動 MyCAT 前驗證資料庫遠程訪問情況

在驗證之前由於我們的主資料庫目前並沒有創建mycat 這個用戶,我們需要登錄到 118.25.102.189:3306 資料庫實例進行創建用戶,腳本如下:

# 在 118.25.102.189 主機上登錄 mysql 伺服器mysql -uroot # 登錄成功後進行創建用戶並授權CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';

開始登陸驗證MyCAT登陸

在我們配置並創建完畢MyCAT 用戶之後,就可以嘗試登陸MyCAT 了, 通過以下方式登陸,進行驗證,登陸方式如下:

# 完事之後我們開始嘗試登陸MyCAT , mycat 默認的埠為 8066mysql -umycat -h118.26.102.189 -p123456 -P8066

通過上述方式登陸成功後,如下圖所示:

文章轉載至樂字節

最後給大家推薦幾個b站超詳細的Java自學課:

MySQL資料庫:BV1tK4y197JC

SpringBoot Vue前後端分離項目實戰:BV1Tq4y1E7i5nodeJs項目:BV1SK4y197G3JavaScript全套教程:BV1yf4y1Y7oM

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了