小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

mysql進階學(xué)習(xí)三之mycat讀寫分離和分庫分表

 怡紅公子0526 2021-05-06

  前面已經(jīng)配置了mysql的主從復(fù)制,其實很容易,主節(jié)點寫入了數(shù)據(jù),從節(jié)點進行同步,所以寫操作使用主節(jié)點,讀操作使用從節(jié)點,這樣就有效降低了數(shù)據(jù)庫的壓力

  但是我們用java程序不可能去連接多個數(shù)據(jù)源,執(zhí)行sql的時候還要判斷是使用主節(jié)點還是從節(jié)點,所以使用mycat,一端對java提供一個統(tǒng)一的接口,另外一端可以連接多個數(shù)據(jù)源,最好是我們可以跟以前一樣連接數(shù)據(jù)庫一樣,讓使用者感覺不到mycat的存在;

  mycat就是實現(xiàn)了這些功能,把連接多個數(shù)據(jù)庫的操作交給了mycat,在mycat中配置哪個節(jié)點是讀,哪個是寫,在執(zhí)行sql的時候就會自動的去連接該節(jié)點;

  還有一點,mycat是國人使用java開發(fā)并開源了的,啟動mycat需要jdk環(huán)境

 

1.mycat安裝

  本來是想用linux版的mycat的,由于云服務(wù)器只有一臺,在服務(wù)器上沒法鏈接上本地的mysql,就是用了windows版的mycat,用法和配置文件和linux版的都是一樣的;

  mycat官網(wǎng)

  mycat的github

  自行下載對應(yīng)的版本,這里下載的是1.6.7.4版本,解壓之后的目錄:

 

2. mycat的配置

  首先我們修改一下mycat的用戶名和密碼,在安裝目錄/conf/server.xml中

 

  然后需要配置一下schema.xml:

 

   我這里測試用的是balance="2",將主節(jié)點和從節(jié)點中mydb數(shù)據(jù)庫stu表中相同id的數(shù)據(jù)改成不一樣的,然后去連接mycat查詢該表數(shù)據(jù),每次查詢都不一樣

   想測試讀寫分離,這里設(shè)置為1或者3

    balance="0": 不開啟讀寫分離,讀操作和寫操作都是用的writeHost;

    balance="1": 開啟讀寫分離,這種情況是存在多主多從的時候,一個主節(jié)點提供寫操作,其他的主節(jié)點和所有從節(jié)點提供負載均衡的讀操作

    balance="2": 讀操作隨機讀選擇主節(jié)點和從節(jié)點

    balance="3": 開啟讀寫分離,寫操作使用寫主機(主節(jié)點也就是寫主機,從節(jié)點是讀主機),讀操作使用讀主機

 

3. mycat啟動

  進入mycat安裝目錄下的bin目錄,兩種方式:

   ?。?)前臺啟動,可以看到啟動情況:./mycat.bat console

   ?。?)后臺啟動: ./mycat.bat start

 

  連接mycat,就跟連接mysql一樣,打開cmd,mysql -umycat -p123456 -h 127.0.0.1 -P 8066   //注意端口是8066端口

  使用mycat向stu表插入一條數(shù)據(jù),然后將主節(jié)點和從節(jié)點數(shù)據(jù)數(shù)據(jù)改成不一樣的,你再去讀幾次,可以看到是隨機的,說明我們mycat配置的沒問題;

  還是說一句,想測試讀寫分離的,記得把schema.xml中設(shè)置為balance="1"或者balance="3"

 

4 數(shù)據(jù)分片

  數(shù)據(jù)分片也就是俗話說的分庫分表

  4.1 分庫

  當(dāng)一個數(shù)據(jù)庫中的數(shù)據(jù)太多了,效率也就低了,我們需要將后續(xù)插入A主機中mydb數(shù)據(jù)庫中表tab1的數(shù)據(jù),都插入到B主機中mydb數(shù)據(jù)庫tab1表中,除此之外,還需要將A主機中的tab1中的數(shù)據(jù)遷移到B主機中

  至于數(shù)據(jù)遷移工具,可以看看這個老哥博客,寫得挺不錯的

  schema.xml文件

  然后測試在mycat中只要是對stu2表的任何操作,都是使用的是第二個主機,從而實現(xiàn)了分庫

 

  4.2 分表

  分庫:X主機中A數(shù)據(jù)庫中有表tab1,tab2,tab3,由于每個表數(shù)據(jù)都很多,根據(jù)分析可以將tab1拿出來,放到Y(jié)主機中A數(shù)據(jù)庫下,使得以后所有對tab1的所有操作都是來訪問Y主機

  分表:X主機A數(shù)據(jù)庫中有表tab4,但是這個tab4中數(shù)據(jù)有一千萬條,我們將這個表用一定的方法,分成兩份,分別放到當(dāng)前主機中和Y主機中A數(shù)據(jù)庫表tab4

  不管分庫還是分表,都要配合數(shù)據(jù)遷移工具才能實現(xiàn)的!

  

  首先配置schema.xml文件

 

  然后配置rule.xml,這種規(guī)則其實很好立理解,就是取余,在mycat中向stu3中插入數(shù)據(jù),會根據(jù)id對2進行取余,得到的結(jié)果肯定是0或者1,當(dāng)?shù)扔?時就放在一臺主機中,等于1就放在另外一個主機中,這個跟redis集群放入數(shù)據(jù)一樣;

 

   4.3 測試

  我們在mycat中執(zhí)行以下6條sql:

insert into stu3 (id,name) values(1,"jack01");
insert into stu3 (id,name) values(2,"jack02");
insert into stu3 (id,name) values(3,"jack03");
insert into stu3 (id,name) values(4,"jack04");
insert into stu3 (id,name) values(5,"jack05");
insert into stu3 (id,name) values(6,"jack06");

 

  然后我們就可以分別在兩臺主機中各看到三條數(shù)據(jù):

            

 

  然后我們在mycat中查詢所有的數(shù)據(jù),可以看到id沒有經(jīng)過排序,只是將主機A中的stu3的數(shù)據(jù)+主機B中stu3中的數(shù)據(jù),所以使用mycat查詢分表之后的數(shù)據(jù),就是將所有該表所在的主機中數(shù)據(jù)都查出來,然后再進行拼接;

         

 

  4.4 關(guān)聯(lián)表分表

  舉個例子:現(xiàn)在我們是對stu3表進行分表,但是現(xiàn)在有個addr表記錄這每個用戶的具體住址,stu3和addr是一對一,兩個表通過s_id關(guān)聯(lián)

  在查詢addr表的時候肯定會根據(jù)s_id查詢用戶姓名,那么分表肯定需要相同的規(guī)則進行分,比如將stu3表中id=1的數(shù)據(jù)分到A主機中,那么addr表中id=2的數(shù)據(jù)也就要分到A主機中,不然跨主機做連表查詢就太麻煩了

 

  我們需要在schema.xml中進行配置,這樣配置了之后每次向addr表中插入數(shù)據(jù)的時候,會根據(jù)s_id找到對應(yīng)的stu3表中記錄是在哪個主機上,就把addr數(shù)據(jù)也放在那個主機上

 

  測試了一下,是可以的,這樣的話可以保證有關(guān)聯(lián)的表即使分表也會相應(yīng)的分到同一個主機中,去連表查詢的時候效率會高點

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多