前言?借助MyCat來實現(xiàn)MySQL的分庫分表落地,沒有實現(xiàn)過的,或者沒了解過的可以看看
?
在之前寫過一篇關于mysql分庫分表的文章,那篇文章只是給大家提供了一個思路,但是回復下面有很多說是細節(jié)問題沒有提到。所以咔咔就在出了這篇文章。
本文只是針對其中的一個細節(jié)而已,比如如何落地MySQL的分庫分表,本文使用數(shù)據(jù)庫中間件MyCat來實現(xiàn)。
其中還有最多的回復是分庫分表后的分頁查詢如何操作,這個問題也會在后文繼續(xù)寫到。
關于MySQL分庫分表這個真正落地使用中間還有很多的問題,咔咔盡量把解決方案都提供給大家,如你有更好的實現(xiàn)方案,評論區(qū)見哈!
本文使用環(huán)境?- MySQL8.0
- Centos7.3
避免提示廣告問題,自己去打開MyCat的官方地址去復制下載地址,這里咔咔就不提供了。
咔咔使用的虛擬機是centos7.3,需要環(huán)境的jdk已經(jīng)有了,就不在寫教程了。如沒有的話,百度搜搜就可以了哈!
下圖就是安裝成功的安裝包進行解壓:?tar -zxvf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz
,解壓成功后會在目錄下存在一個?mycat
目錄。
需要創(chuàng)建一個新的MySQL用戶用來連接Mycat
以下就是創(chuàng)建用戶的流程
//?創(chuàng)建mycat用戶
CREATE?
USER?
'mycat'@
'%'?
IDENTIFIED?
BY?
'mycat';
//?修改密碼
ALTER?
USER?
'mycat'@
'%'?
IDENTIFIED?
WITH?mysql_native_password?
BY?’Fang,
1996
';?
//?刷新權限
FLUSH?PRIVILEGES;
三、配置MyCat?
配置項一:server.xml
此處使用上邊創(chuàng)建的新的MySQL用戶mycat,可以管理的邏輯庫為mycat_order,對應schema.xml中的<schema name="mydatabase"
框出的來的解讀一下
第一行:name值后邊是上邊創(chuàng)建的MySQL用戶 第二行:是mycat用戶的密碼 第三行:是數(shù)據(jù)庫
配置項二:schema.xml
這個文件主要修改連接其他數(shù)據(jù)庫的倆個節(jié)點
使用規(guī)則是mod-long這個需要注意一下子
在這塊的配置咔咔卡了很久,下面這個是咔咔已經(jīng)配置好的
配置項三:rule.xml
這里是order_id使用mod-long規(guī)則這個修改就是你有幾個節(jié)點就寫多少即可
三、數(shù)據(jù)庫信息準備?在倆臺服務器114.55.103.25和192.168.253.129創(chuàng)建word數(shù)據(jù)庫kaka和kaka
分別創(chuàng)建t_order和t_order_detail倆張表
表結構如下
CREATE?
TABLE?
`t_order_detail`?(
??
`od_id`?
int(
11)?
NOT?
NULL,
??
`order_id`?
int(
11)?
DEFAULT?
NULL,
??
`goods_id`?
int(
11)?
DEFAULT?
NULL,
??
`unit_price`?
float?
DEFAULT?
NULL,
??
`qty`?
int(
11)?
DEFAULT?
NULL,
??PRIMARY?
KEY?(
`od_id`)
)?
ENGINE=
InnoDB?
DEFAULT?
CHARSET=utf8;
CREATE?
TABLE?
`t_order`?(
??
`order_id`?bagint(
20)?
NOT?
NULL,
??
`user_id`?
int(
11)?
DEFAULT?
NULL,
??
`pay_mode`?
tinyint(
4)?
DEFAULT?
NULL,
??
`amount`?
float?
DEFAULT?
NULL,
??
`order_date`?datetime?
DEFAULT?
NULL,
??PRIMARY?
KEY?(
`order_id`)
)?
ENGINE=
InnoDB?
DEFAULT?
CHARSET=utf8;
四、測試連接并插入數(shù)據(jù),查看數(shù)據(jù)分布狀態(tài)?
連接:?mysql -umycat -p -P8066 -h192.168.253.129 --default-auth=mysql_native_password
連接成功就可以看到我們的邏輯庫然后添加三個數(shù)據(jù)
insert?
into?t_order?(order_id,user_id,pay_mode,amount)?
values?(
next?
value?
for?MYCATSEQ_ORDER,
103,
1
Query?OK,?
1?
row?affected?(
0.01?sec)
insert?
into?t_order?(order_id,user_id,pay_mode,amount)?
values?(
next?
value?
for?MYCATSEQ_ORDER,
103,
1
Query?OK,?
1?
row?affected?(
0.01?sec)
insert?
into?t_order?(order_id,user_id,pay_mode,amount)?
values?(
next?
value?
for?MYCATSEQ_ORDER,
103,
1
Query?OK,?
1?
row?affected?(
0.01?sec)
這個時候我們查看一下邏輯庫的t_order數(shù)據(jù),這里的order_id本應該是從1000開始的,之前咔咔做測試使用了一些。這時我們在來看192.168.253.129和114.55.103.25這倆臺數(shù)據(jù)庫的數(shù)據(jù)分布
「192.168.253.129數(shù)據(jù)庫?」?這個可以看到進入了倆條數(shù)據(jù)
「144.55.103.25數(shù)據(jù)庫?」
這臺數(shù)據(jù)庫只進入了一條數(shù)據(jù)
五、分頁查詢,需要的數(shù)據(jù)在不同表的查詢?其實這一切mycat都已經(jīng)幫你做好了
比如現(xiàn)在user_id為103的數(shù)據(jù)分布分倆臺數(shù)據(jù)庫上,我們進行查詢
還有分頁問題,都跟平時一樣的
六、總結?- 數(shù)據(jù)庫使用MySQL8.0需要注意密碼問題
- 在配置schema.xml時需要注意
- 配置server.xml時邏輯庫在user用戶雖然不需要但是也需要改為一致
- 修改MySQL用戶的host為%
- 密碼驗證規(guī)則設置為mysql_native_password
- 連接mycat時一定要帶著mysql_native_password這個參數(shù)
本文使用的mycat也是咔咔第一次接觸,也有很多的東西不明白。后邊咔咔也會一點點的補充這方面的知識,希望大家一起共同進步。
本文摘自 :https://blog.51cto.com/u