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

Mysql讀寫(xiě)分離集群的搭建且與MyCat進(jìn)行整合
2021-10-13 21:46:12

1. 概述

老話說(shuō)的好:不熟悉的東西不要不懂裝懂,做人要坦誠(chéng),知道就是知道,不知道就是不知道。

?

言歸正傳,今天我們來(lái)聊聊 Mysql主從讀寫(xiě)分離集群是如何搭建的,并且聊一下如何用 MyCat 去訪問(wèn)這個(gè)Mysql讀寫(xiě)分離集群。

?

2. 場(chǎng)景介紹

服務(wù)器A IP:192.168.1.22

服務(wù)器B IP:192.168.1.12

?

服務(wù)器A 和 服務(wù)器B 都安裝了Mysql,且初始化完成,關(guān)于Mysql在CentOS7的安裝,可參見(jiàn)我的另一篇文章《MyCat的快速搭建》。

服務(wù)器B作為 Mysql 主服務(wù),服務(wù)器A作為 Mysql 從服務(wù)器。

MyCat 安裝在服務(wù)器A上。MyCat的安裝也可參見(jiàn)我的另一篇文章《MyCat的快速搭建》。

?

3.??Mysql主從讀寫(xiě)分離集群的搭建

3.1 修改 服務(wù)器B(主)配置文件

#?vim /etc/my.cnf

?

?

3.2 重啟服務(wù)器B(主)的 Mysql 服務(wù)

#?systemctl restart mysqld

?

3.3?修改 服務(wù)器A(從)配置文件

#?vim /etc/my.cnf

?

?

3.4 重啟服務(wù)器A(從)的 Mysql 服務(wù)

#?systemctl restart mysqld

?

3.5 在?服務(wù)器B(主)上創(chuàng)建同步賬號(hào)并授權(quán)

#?mysql -u root -p

mysql>?create user 'repl'@'%' identified by 'Zhuifengren@123456';

mysql> grant replication slave on *.* to 'repl'@'%';

mysql> flush privileges;

?

3.6 在?服務(wù)器B(主)上進(jìn)行鎖表操作

#?mysql -u root -p

mysql> flush tables with read lock;

?

3.7 在?服務(wù)器B(主)上找到 log-bin 的位置

#?mysql -u root -p

mysql> show master status;

?

3.8 將?服務(wù)器B(主)的 mysql 數(shù)據(jù)復(fù)制到?服務(wù)器A(從)

備份數(shù)據(jù)

#?mysqldump --all-databases --master-data > dbdump.db -uroot -p

注意:剛才鎖表的mysql客戶端不要退出,重新開(kāi)一個(gè)窗口?。?!

傳輸數(shù)據(jù)文件

# scp dbdump.db root@192.168.1.22:/home

?

3.9 在?服務(wù)器A(從)還原 mysql 數(shù)據(jù)

# cd /home

# mysql < dbdump.db -uroot -p

注意:兩臺(tái)服務(wù)器mysql的版本務(wù)必一致,否則可能報(bào)錯(cuò)?。?!

?

3.10?將 服務(wù)器B(主)上鎖表操作取消

mysql>?unlock tables;

?

3.11?在?服務(wù)器A(從)上設(shè)置主從同步配置

#?mysql -u root -p

mysql>?change master to
-> master_host='192.168.1.12',
->?master_user='repl',
->?master_password='Zhuifengren@123456',
->?master_log_file='zhuifengren_log.000001',
->?master_log_pos=1432;

?

mysql> start slave;

?

3.12?Authentication plugin 'caching_sha2_password' reported error 報(bào)錯(cuò)解決

如果發(fā)現(xiàn)主從數(shù)據(jù)沒(méi)有同步,可以查看從庫(kù)(服務(wù)器A)的同步日志

# cat /var/log/mysqld.log

?

如果有如下報(bào)錯(cuò),則說(shuō)明之前創(chuàng)建的 repl 賬戶密碼加密方式有問(wèn)題:?

Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061

?

解決辦法:

進(jìn)入 服務(wù)器B(主)的mysql客戶端,修改用戶密碼的加密方式

#?mysql -u root -p

mysql>?alter user 'repl'@'%' identified WITH sha256_password by 'Zhuifengren@123456';
mysql>?grant replication slave on *.* to 'repl'@'%';
mysql>?flush privileges;

?

然后進(jìn)入 服務(wù)器A(從)重啟主從同步

#?mysql -u root -p

mysql> stop slave;

mysql> start slave;

問(wèn)題解決?。?!

?

4. MyCat 配置讀寫(xiě)分離

4.1 在之前的基礎(chǔ)上修改MyCat配置

# cd?/home/mycat/conf

# vim schema.xml

?

?

其中 讀庫(kù)readHost 標(biāo)簽寫(xiě)在? 寫(xiě)庫(kù)writeHost 標(biāo)簽里面。

dataHost 標(biāo)簽中 balance 屬性的含義如下:(摘抄自 MyCat 官網(wǎng)的權(quán)威指南)

balance 屬性 負(fù)載均衡類型,目前的取值有 4 種:

1. balance="0", 不開(kāi)啟讀寫(xiě)分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上。

2. balance="1",全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡,簡(jiǎn)單的說(shuō),當(dāng)雙 主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語(yǔ)句的負(fù)載均衡。

3. balance="2",所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā)。

4. balance="3",所有讀請(qǐng)求隨機(jī)的分發(fā)到 wiriterHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力, 注意 balance=3 只在 1.4 及其以后版本有,1.3 沒(méi)有。

?

4.2 重啟MyCat

# cd?/home/mycat/bin

#?./mycat stop

# ./mycat start

?

5. 綜述

今天聊了一下 Mysql 主從讀寫(xiě)分離集群的搭建,以及 MyCat 如何整合 Mysql 讀寫(xiě)分離集群,希望可以對(duì)大家的工作有所幫助。

歡迎幫忙點(diǎn)贊、評(píng)論、轉(zhuǎn)發(fā)、加關(guān)注 :)

關(guān)注追風(fēng)人聊Java,每天更新Java干貨。

?

本文摘自 :https://www.cnblogs.com/

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