當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝
2021-09-08 12:36:49

借助MyCat來(lái)實(shí)現(xiàn)MySQL的分庫(kù)分表落地,沒有實(shí)現(xiàn)過(guò)的,或者沒了解過(guò)的可以看看

?
前言?

在之前寫過(guò)一篇關(guān)于mysql分庫(kù)分表的文章,那篇文章只是給大家提供了一個(gè)思路,但是回復(fù)下面有很多說(shuō)是細(xì)節(jié)問(wèn)題沒有提到。所以咔咔就在出了這篇文章。

本文只是針對(duì)其中的一個(gè)細(xì)節(jié)而已,比如如何落地MySQL的分庫(kù)分表,本文使用數(shù)據(jù)庫(kù)中間件MyCat來(lái)實(shí)現(xiàn)。

其中還有最多的回復(fù)是分庫(kù)分表后的分頁(yè)查詢?nèi)绾尾僮?,這個(gè)問(wèn)題也會(huì)在后文繼續(xù)寫到。

關(guān)于MySQL分庫(kù)分表這個(gè)真正落地使用中間還有很多的問(wèn)題,咔咔盡量把解決方案都提供給大家,如你有更好的實(shí)現(xiàn)方案,評(píng)論區(qū)見哈!

本文使用環(huán)境?
  • MySQL8.0
  • Centos7.3
一、MyCat安裝?

避免提示廣告問(wèn)題,自己去打開MyCat的官方地址去復(fù)制下載地址,這里咔咔就不提供了。

咔咔使用的虛擬機(jī)是centos7.3,需要環(huán)境的jdk已經(jīng)有了,就不在寫教程了。如沒有的話,百度搜搜就可以了哈!

下圖就是安裝成功的安裝包MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表進(jìn)行解壓:?tar -zxvf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz,解壓成功后會(huì)在目錄下存在一個(gè)?mycat目錄。

二、創(chuàng)建一個(gè)新的MySQL用戶?

需要?jiǎng)?chuàng)建一個(gè)新的MySQL用戶用來(lái)連接Mycat

以下就是創(chuàng)建用戶的流程

//?創(chuàng)建mycat用戶

CREATE? USER? 'mycat'@ '%'? IDENTIFIED? BY? 'mycat';
//?修改密碼
ALTER? USER? 'mycat'@ '%'? IDENTIFIED? WITH?mysql_native_password? BY?’Fang, 1996 ';?
//?刷新權(quán)限
FLUSH?PRIVILEGES;


三、配置MyCat?

配置項(xiàng)一:server.xml

此處使用上邊創(chuàng)建的新的MySQL用戶mycat,可以管理的邏輯庫(kù)為mycat_order,對(duì)應(yīng)schema.xml中的<schema name="mydatabase"

框出的來(lái)的解讀一下

第一行:name值后邊是上邊創(chuàng)建的MySQL用戶 第二行:是mycat用戶的密碼 第三行:是數(shù)據(jù)庫(kù)

MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_02配置項(xiàng)二:schema.xml

這個(gè)文件主要修改連接其他數(shù)據(jù)庫(kù)的倆個(gè)節(jié)點(diǎn)

使用規(guī)則是mod-long這個(gè)需要注意一下子

在這塊的配置咔咔卡了很久,下面這個(gè)是咔咔已經(jīng)配置好的MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_03

配置項(xiàng)三:rule.xml

這里是order_id使用mod-long規(guī)則MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_04這個(gè)修改就是你有幾個(gè)節(jié)點(diǎn)就寫多少即可MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_05

三、數(shù)據(jù)庫(kù)信息準(zhǔn)備?

在倆臺(tái)服務(wù)器114.55.103.25和192.168.253.129創(chuàng)建word數(shù)據(jù)庫(kù)kaka和kaka

分別創(chuàng)建t_order和t_order_detail倆張表

表結(jié)構(gòu)如下



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;
四、測(cè)試連接并插入數(shù)據(jù),查看數(shù)據(jù)分布狀態(tài)?

連接:?mysql -umycat -p -P8066 -h192.168.253.129 --default-auth=mysql_native_password

連接成功就可以看到我們的邏輯庫(kù)MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_06然后添加三個(gè)數(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)

這個(gè)時(shí)候我們查看一下邏輯庫(kù)的t_order數(shù)據(jù),這里的order_id本應(yīng)該是從1000開始的,之前咔咔做測(cè)試使用了一些。MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_07這時(shí)我們?cè)趤?lái)看192.168.253.129和114.55.103.25這倆臺(tái)數(shù)據(jù)庫(kù)的數(shù)據(jù)分布

「192.168.253.129數(shù)據(jù)庫(kù)?」?這個(gè)可以看到進(jìn)入了倆條數(shù)據(jù)

MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_08「144.55.103.25數(shù)據(jù)庫(kù)?」

這臺(tái)數(shù)據(jù)庫(kù)只進(jìn)入了一條數(shù)據(jù)MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_09

五、分頁(yè)查詢,需要的數(shù)據(jù)在不同表的查詢?

其實(shí)這一切mycat都已經(jīng)幫你做好了

比如現(xiàn)在user_id為103的數(shù)據(jù)分布分倆臺(tái)數(shù)據(jù)庫(kù)上,我們進(jìn)行查詢

MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_10還有分頁(yè)問(wèn)題,都跟平時(shí)一樣的MyCat實(shí)現(xiàn)MySQL分庫(kù)分表,拿走不用謝_MySQL分庫(kù)分表_11

六、總結(jié)?
  • 數(shù)據(jù)庫(kù)使用MySQL8.0需要注意密碼問(wèn)題
  • 在配置schema.xml時(shí)需要注意
  • 配置server.xml時(shí)邏輯庫(kù)在user用戶雖然不需要但是也需要改為一致
  • 修改MySQL用戶的host為%
  • 密碼驗(yàn)證規(guī)則設(shè)置為mysql_native_password
  • 連接mycat時(shí)一定要帶著mysql_native_password這個(gè)參數(shù)

本文使用的mycat也是咔咔第一次接觸,也有很多的東西不明白。后邊咔咔也會(huì)一點(diǎn)點(diǎn)的補(bǔ)充這方面的知識(shí),希望大家一起共同進(jìn)步。

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >