mysql分庫分表之mycat中介軟體解決方案

2021-08-27 03:51:05 字數 1952 閱讀 4238

專案運營期間隨著時間的推移線上環境的資料越來越多,線上的sql跑的越來越慢,當資料表增加的千萬級別資料,單純的增加索引已經不能解決

線上的慢sql問題,這時,分表 ,分割槽,分庫應運而生;小弟不才剛接觸了分表,分庫,現在分享下,有問題多多指教,見笑。

1 mysql分表分為水平切分,和垂直切分

垂直分割(並不常用)

就是將乙個表按照欄位來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。

優勢:比沒有分表來說,提高了查詢速度,降低了查詢結果所用記憶體;

劣勢:沒有解決大量記錄的問題,對於單錶來說隨著記錄增多,效能還是下降很快;

2 水平分割(重要,實際應用中使用最多)

水平分割是企業最常用到的,水平拆分就是大表按照記錄分為很多子表:

1 hash、自增id取模:

對某個字段進行hash來確定建立幾張表,並根據hash結果存入不同的表;

2 按時間

根據業務可以按照天、月、年來進行拆分;

3 按每個表的固定記錄數

一般按照自增id進行拆表,一張表的資料行到了指定的數量,就自動儲存到下一張表中。比如規定一張表只能存1-1000個記錄;

4 將老資料遷移到一張歷史表

比如日誌表,一般只查詢3個月之內的資料,對於超過3個月的記錄將之遷移到歷史子表中;

分表時需要的設計:

查詢時:要根據預定義規則查詢不同的子表;

·        mycat_home/conf/schema.xml中定義邏輯庫,表、分片節點等內容;

·        mycat_home/conf/rule.xml中定義分片規則;

·        mycat_home/conf/server.xml中定義使用者以及系統相關變數,如埠等。

首先server.xml配置 如果是資料庫root使用者配置密碼以及schemas;

如果是其他使用者

user

testdb

true

然後配置schema.xml 檔案

1 分庫操作,像下圖中schema標籤裡面配置;

2 單庫多表

配置rule.xml 規則 

根據userid取模分表

4中的count代表分表的數量

這樣mycat的配置基本算是完成了,然後啟動命令

mycat.bat start

啟動後可以通過如下命令檢視mtcat執行狀態

mycat.bat status

可以使用如下命令停止mycat服務

mycat.bat stop

這樣mycat的環境基本部署完成了,下面就是啟動專案

詳情可以檢視git 位址mycatdemo

中資料來源

#配置資料來源

#mycat

的連線賬號和密碼

spring.datasource.druid.username

=root

spring.datasource.druid.password

=123456

#mycat

的邏輯庫

埠也是mycat

的配置檔案的schem名稱

spring.datasource.druid.url

=jdbc:mysql://localhost:8066/testdb

mysql 分庫分表mycat部署

垂直分割 縱向切分 把單一的表,拆分成多個表,並分散到不同的資料庫 主機 上。乙個資料庫由多個表構成,每個表對應不同的業務,可以按照業務對錶進行分類,將其分布到不同的資料 庫 主機 上,實現專庫專用,讓不同的庫 主機 分 擔不同的業務 水平分割 橫向切分 按照表中某個欄位的某種規則,把向表中寫入的記...

mycat實現mysql分庫分表

1.mycat介紹 mycat是乙個開源的分布式資料庫系統,是乙個實現了mysql協議的伺服器,前端使用者可以把它看作是乙個資料庫 用mysql客戶端工具和命令列訪問,而其後端可以用mysql原生協議與多個mysql伺服器通訊,也可以用jdbc協議與大多數主流資料庫伺服器通訊,其核心功能是分表分庫,...

Mycat分庫分表

schema.xml 配置 name dn1 datahost localhost1 database db1 name dn2 datahost localhost1 database db2 name dn3 datahost localhost1 database db3 把localhost...