Mycat-01-概述

是什麼

Mycat 是數據庫中間件。

爲什麼要用Mycat

  1. Java與數據庫緊耦合。
  2. 高訪問量高併發對數據庫的壓力。
  3. 讀寫請求數據不一致

Mycat官網

https://github.com/MyCATApache/

中文網站: http://mycat.org.cn/

幹什麼

讀寫分離
在這裏插入圖片描述

數據分片

垂直拆分(分庫) 、 水平拆分(分表) 、 垂直+水平拆分(分庫分表)
在這裏插入圖片描述

多數據源整合
在這裏插入圖片描述

原理

Mycat 的原理中最重要的一個動詞是“攔截”,它攔截了用戶發送過來的 SQL 語句,首先對SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然後將此 SQL 發往後端的真實數據庫, 並將返回的結果做適當的處理,最終再返回給用戶。

這種方式把數據庫的分佈式從代碼中解耦出來,程序員察覺不出來後臺使用 Mycat 還是MySQL。

安裝啓動

安裝

下載&安裝

國內下載: http://dl.mycat.org.cn/ 查看release清單,

選定1.6.7.4-release

[root@vm1 opt]# wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

[root@vm1 opt]# tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

[root@vm1 opt]# cp -r  mycat/ /usr/local/

[root@vm1 mycat]# ll
總用量 12
drwxr-xr-x 2 root root  190 5月  13 21:30 bin
drwxr-xr-x 2 root root    6 5月  13 21:30 catlet
drwxr-xr-x 4 root root 4096 5月  13 21:30 conf
drwxr-xr-x 2 root root 4096 5月  13 21:30 lib
drwxr-xr-x 2 root root    6 5月  13 21:30 logs
-rwxr-xr-x 1 root root  227 5月  13 21:30 version.txt

三個配置文件

  1. schema.xml: 定義邏輯庫,表、分片節點等內容
  2. rule.xml: 定義分片規則
  3. server.xml: 定義用戶以及系統相關變量,如端口等.

配置

server.xml

<!-- 爲了跟mysql root用戶區分,這裏用戶名改爲mycat -->
<user name="mycat" defaultAccount="true">
        <property name="password">123456</property>
        <!-- mycat 邏輯庫-->
        <property name="schemas">TESTDB</property>
        <property name="defaultSchema">TESTDB</property>
        <!--No MyCAT Database selected 錯誤前會嘗試使用該schema作爲schema,不設置則爲null,報錯 -->

        <!-- 表級 DML 權限設置 -->
        <!--            
        <privileges check="false">
                <schema name="TESTDB" dml="0110" >
                        <table name="tb01" dml="0000"></table>
                        <table name="tb02" dml="1111"></table>
                </schema>
        </privileges>           
         -->
</user>

schema.xml

<!-- dataNode 指定數據節點-->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>

<!-- 
     dataHost 指定虛擬主機 
     database 指定數據庫
-->
<dataNode name="dn1" dataHost="host1" database="sm_01" />

<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <!--心跳檢測 -->
        <heartbeat>select user()</heartbeat>

        <!-- write 主機, read主機-->
        <writeHost host="hostM1" url="vm1:3306" user="root" password="123456">
                <readHost host="hostS1" url="vm2:3306" user="root" password="123456"></readHost>
        </writeHost>
</dataHost>

vim 如何顯示行號? :set nu

啓動

驗證數據庫能否訪問

[root@vm1 conf]# mysql -h vm1 -P 3306 -uroot -p123456

[root@vm1 conf]# mysql -h vm2 -P 3306 -uroot -p123456

啓動程序

#1. 控制檯啓動 ---  能看到啓動日誌,方便定位問題
[root@vm1 bin]# ./mycat console

#2. 後臺啓動
[root@vm1 bin]# ./mycat start

登錄

登錄後臺管理窗口(9066)

此登錄方式用於管理維護mycat.

[jhs@vm2 ~]$ mysql -umycat -p123456 -P 9066 -h vm1
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+

mysql> show @@help;查看幫助信息

在這裏插入圖片描述

登錄數據窗口(8066)

此登錄方式用於通過 Mycat 查詢數據,我們選擇這種方式訪問 Mycat

[jhs@vm2 ~]$ mysql -umycat -p123456 -P 8066 -h vm1

mysql> use TESTDB;
Database changed

mysql> show tables;
+-----------------+
| Tables_in_sm_01 |
+-----------------+
| test_book       |
+-----------------+
1 row in set (0.01 sec)

此時,vm1和vm2的 sm_01庫上,實際上確實是有且只有一張表test_book.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章