使用Mycat進行分庫分表,讀寫分離

什麼是Mycat

它是一個開源的分佈式數據庫系統,是一個實現了 MySQL 協議的的
Server,前端用戶可以把它看作是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,而其後端可以用MySQL 原生(Native)協議與多個 MySQL 服務器通信,也可以用 JDBC 協議與大多數主流數據庫服務器通信,其核心功能是分表分庫,即將一個大表水平分割爲 N 個小表,存儲在後端 MySQL 服務器裏或者其他數據庫裏。

關鍵特性

支持SQL92標準

遵守Mysql原生協議,跨語言,跨平臺,跨數據庫的通用中間件代理。

基於心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集羣。

支持Galera for MySQL集羣,Percona Cluster或者MariaDB cluster

基於Nio實現,有效管理線程,高併發問題。

支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數。

支持單庫內部任意join,支持跨庫2表join,甚至基於caltlet的多表join。

支持通過全局表,ER關係的分片策略,實現了高效的多表join查詢。

支持多租戶方案。

支持分佈式事務(弱xa)。

支持全局序列號,解決分佈式下的主鍵生成問題。

分片規則豐富,插件化開發,易於擴展。

強大的web,命令行監控。

支持前端作爲mysq通用代理,後端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。

支持密碼加密

支持服務降級

支持IP白名單

支持SQL黑名單、sql注入攻擊攔截

支持分表(1.6)

集羣基於ZooKeeper管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。

Mycat安裝與使用

下載:

https://github.com/MyCATApache/Mycat-download 具體下載哪個版本以發佈爲準,推薦穩定最新版(我這裏使用1.6.6.1)

安裝:

下載的文件直接解壓即可。

運行:

linux:

./mycat start 啓動

./mycat stop 停止

./mycat console 前臺運行

./mycat install 添加到系統自動啓動(暫未實現)

./mycat remove 取消隨系統自動啓動(暫未實現)

./mycat restart 重啓服務

./mycat pause 暫停

./mycat status 查看啓動狀態

win:

直接運行startup_nowrap.bat,如果出現閃退,在cmd 命令行運行,查看出錯原因。

內存配置:

啓動前,一般需要修改JVM配置參數,打開conf/wrapper.conf文件,如下行的內容爲2G和2048,可根據本機配置情況修改爲512M或其它值。 以下配置跟jvm參數完全一致,可以根據自己的jvm參數調整。

Java Additional Parameters

wrapper.java.additional.1=

wrapper.java.additional.1=-DMYCAT_HOME=.

wrapper.java.additional.2=-server

wrapper.java.additional.3=-XX:MaxPermSize=64M

wrapper.java.additional.4=-XX:+AggressiveOpts

wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m

wrapper.java.additional.6=-Dcom.sun.management.jmxremote

wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984

wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false

wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false

wrapper.java.additional.10=-Xmx100m

wrapper.java.additional.11=-Xms100m

wrapper.java.additional.12=-XX:+UseParNewGC

wrapper.java.additional.13=-XX:+UseConcMarkSweepGC

wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection

wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0

wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70

以下配置作廢:

wrapper.java.initmemory=3

wrapper.java.maxmemory=64

Mycat連接測試:

測試mycat與測試mysql完全一致,mysql怎麼連接,mycat就怎麼連接。

推薦先採用命令行測試:

mysql -uroot -proot -P8066 -h127.0.0.1

如果採用工具連接,1.6.6.1目前部分工具無法連接,會提示database not selected,建議採用高版本,navicat測試。1.5已經修復了部分工具連接。

 

我這邊本地使用win10 數據庫軟件 navicat Premium12

server.xml

重點關注下面這段,其他默認即可。

參數

說明

user

用戶配置節點

--name

登錄的用戶名,也就是連接Mycat的用戶名

--password

登錄的密碼,也就是連接Mycat的密碼

--schemas

數據庫名,這裏會和schema.xml中的配置關聯,多個用逗號分開,例如需要這個用戶需要管理兩個數據庫db1,db2,則配置db1,dbs

--privileges

配置用戶針對表的增刪改查的權限,具體見文檔吧

schema.xml

參數

說明

schema

數據庫設置,此數據庫爲邏輯數據庫,name與server.xml中schema對應

dataNode

分片信息,也就是分庫相關配置

dataHost

物理數據庫,真正存儲數據的數據庫

每個節點的屬性逐一說明:

schema:

屬性

說明

name

邏輯數據庫名,與server.xml中的schema對應

checkSQLschema

數據庫前綴相關設置,建議看文檔,這裏暫時設爲folse

sqlMaxLimit

select 時默認的limit,避免查詢全表

table:

屬性

說明

name

表名,物理數據庫中表名

dataNode

表存儲到哪些節點,多個節點用逗號分隔。節點爲下文dataNode設置的name

primaryKey

主鍵字段名,自動生成主鍵時需要設置

autoIncrement

是否自增

rule

分片規則名,具體規則下文rule詳細介紹

dataNode

屬性

說明

name

節點名,與table中dataNode對應

datahost

物理數據庫名,與datahost中name對應

database

物理數據庫中數據庫名

dataHost

屬性

說明

name

物理數據庫名,與dataNode中dataHost對應

balance

均衡負載的方式

writeType

寫入方式

dbType

數據庫類型

heartbeat

心跳檢測語句,注意語句結尾的分號要加。

Mycat 運行

可能會出現問題 (主要是數據源問題或者不能連接到mysql)

我之前遇到的   nvalid datasource:0     invalid datasource:1

1.需要更改 mysql中的mysql.user表中的root 用戶的 host改爲%

2.mysql配置項  增加 skip-grant-tables

 

成功時

插入兩條數據

在mycat中取數據

分庫分表規則 按照rule.xml中的配置

參考

《Mycat權威指南》: http://www.mycat.io/document/Mycat_V1.6.0.pdf

官網 :http://www.mycat.io/

下載地址:http://dl.mycat.io/

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