MySQL 中間件Mycat部署

什麼是MyCat

一個徹底開源的,面向企業應用開發的大數據庫集羣
支持事務、ACID、可以替代MySQL的加強版數據庫
一個可以視爲MySQL集羣的企業級數據庫,用來替代昂貴的Oracle集羣
一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品
一個新穎的數據庫中間件產品
爲什麼使用MyCat
如今隨着互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種 操作也是愈加的困難,傳統的關係性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現 暫時解決了這一危機。它通過降低數據的安全性,減少對事務的支持,減少對複雜查詢的支持,來獲取性能上 的提升。但是,在有些場合NoSQL一些折衷是無法滿足使用場景的,就比如有些使用場景是絕對要有事務與安 全指標的。這個時候NoSQL肯定是無法滿足的,所以還是需要使用關係性數據庫。如何使用關係型數據庫解決 海量存儲的問題呢?此時就需要做數據庫集羣,爲了提高查詢性能將一個數據庫的數據分散到不同的數據庫中 存儲,爲應對此問題就出現了——MyCat

Mycat作用爲:
能滿足數據庫數據大量存儲;提高了查詢性能

讀寫分離
數據分片 垂直拆分(分庫) 、 水平拆分(分表) 、 垂直+水平拆分(分庫分表)
多數據源整合

支持MySQL ORACLE SQLServer等一些主流的數據庫
核心技術(分庫分表) 數據庫分片指:通過某種特定的條件,將我們存放在一個數據庫中的數據分散存放 在不同的多個數據庫(主機)中,這樣來達到分散單臺設備的負載,根據切片規則,可分爲以下兩種切片模式
MyCAT通過定義表的分片規則來實現分片,每個表格可以捆綁一個分片規則,每個分片規則指定一個分片字段 並綁定一個函數,來實現動態分片算法
1.Schema:邏輯庫,與MySQL中的Database(數據庫)對應,一個邏輯庫中定義了所包括的Table。
2.Table:邏輯表,即物理數據庫中存儲的某一張表,與傳統數據庫不同,這裏的表格需要聲明其所存儲的邏輯 數據節點DataNode。在此可以指定表的分片規則。
3.DataNode:MyCAT的邏輯數據節點,是存放table的具體物理節點,也稱之爲分片節點,通過DataSource來 關聯到後端某個具體數據庫上

4.DataSource:定義某個物理庫的訪問地址,用於捆綁到Datanode上
5.分片規則:前面講了數據切分,一個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則 把數據分到某個分片的規則就是分片規則,數據切分選擇合適的分片規則非常重要,將極大的避免後續數據處理的難

MyCat部署

#安裝jdk環境,爲了方便我這裏直接yum安裝了,jdk必須是1.7以上的版本
[root@mycat ~]# yum -y install java
[root@mycat ~]# java -version 
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
[root@mycat ~]# wget https://github.com/MyCATApache/Mycat-Server/releases/download/Mycat-server-1675-release/Mycat-server-1.6.7.5-release-20200422133810-linux.tar.gz
[root@mycat ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@mycat conf]# pwd
/usr/local/mycat/conf
[root@mycat conf]# vim server.xml         # 修改配置文件
#找到最後,找出此模塊,這裏我是爲了不和系統用戶root衝突,所以修改爲了mycat
<user name="mycat">             
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
#由於我在修改的途中爲了觀看清晰刪除了很多配置,所以這塊爲了以防萬一就先備份一個副本出來
[root@mycat conf]# cp schema.xml schema.xml.bak
[root@mycat conf]# vim schema.xml 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">           # dataNode指定節點
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="host1" database="test1" />                         # database 指定數據庫
        <dataHost name="host1" 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.171.135:3306" user="root"
                                   password="123">                 # 指定寫的數據庫主機,及登錄賬號密碼
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.171.145:3306" user="root" password="123" />       # 指定讀的數據主機及賬戶和密碼
                </writeHost>
        </dataHost>
</mycat:schema>
[root@mycat ~]# ln -s /usr/local/mycat/bin/* /usr/bin/       # 做軟連接方便使用
MySQL主從配置
1、master配置

[root@master ~]# vim /etc/my.cnf 
.....................
log-bin=mysql-bin
server-id=1

mysql> grant replication slave on *.* to rep@'192.168.171.%' identified by '123';            # 賦予權限使從服務器可以連接
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      448 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> create database test1;
mysql> use test1;
mysql> create table tab1(id int primary key auto_increment,name varchar(22));
mysql> insert into tab1 values(1,'zhang'),(2,'li'),(3,'zhao');
mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)
#賦予權限使mycat能夠遠程登錄
mysql> grant all on *.* to root@'192.168.171.%' identified by '123';
#將mysql命令複製過去,是mycat能簡單使用
[root@master ~]# scp /usr/local/mysql/bin/mysql  [email protected]:/usr/bin/

2、slave配置

[root@slave data]# vim /etc/my.cnf 
.................
relay-log=relay-bin
server-id=2
mysql> change master to master_host='192.168.171.135',master_user='rep',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=448;
mysql> start slave;
mysql> show slave status\G

在這裏插入圖片描述

mysql> use test1;
mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)
#賦予權限使mycat能夠遠程連接
mysql> grant all on *.* to root@'192.168.171.%' identified by '123';  

3、測試

[root@mycat ~]# mysql -umycat -p123456 -h 192.168.171.134 -P8066
mysql> show databases; 
+----------+ 
| DATABASE | 
+----------+
| TESTDB   |            # 這個是邏輯庫
+----------+ 
1 row in set (0.00 sec) 

mysql> use TESTDB 
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| tab1            |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章