MySQL主從配置,實(shí)現(xiàn)讀寫分離

一、實(shí)驗(yàn)?zāi)繕?biāo)

搭建兩臺(tái)MySQL服務(wù)器,一臺(tái)作為主服務(wù)器,一臺(tái)作為從服務(wù)器,主服務(wù)器進(jìn)行寫操作,從服務(wù)器進(jìn)行讀操作。

二、測(cè)試環(huán)境

主數(shù)據(jù)庫(kù): CentOS7, MySQL15.1 , 192.168.1.233

從數(shù)據(jù)庫(kù): CentOS7, MySQL15.1 , 192.168.1.234

三、主從配置步驟

1、確保主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)里的數(shù)據(jù)一樣

例如:主數(shù)據(jù)庫(kù)里的a的數(shù)據(jù)庫(kù)里有b,c,d表,那從數(shù)據(jù)庫(kù)里的就應(yīng)該有一個(gè)模子刻出來(lái)的a的數(shù)據(jù)庫(kù)和b,c,d表

我這里在兩臺(tái)MySQL上都創(chuàng)建了個(gè)名為“test”的數(shù)據(jù)庫(kù)來(lái)測(cè)試,如圖:

image

2、在主數(shù)據(jù)庫(kù)里創(chuàng)建一個(gè)同步賬號(hào)

1)每個(gè)從數(shù)據(jù)庫(kù)會(huì)使用一個(gè)MySQL賬號(hào)來(lái)連接主數(shù)據(jù)庫(kù),所以我們要在主數(shù)據(jù)庫(kù)里創(chuàng)建一個(gè)賬號(hào),并且該賬號(hào)要授予 REPLICATION SLAVE 權(quán)限,你可以為每個(gè)從數(shù)據(jù)庫(kù)分別創(chuàng)建賬號(hào),當(dāng)然也可以用同一個(gè)?。?/p>

2)你可以用原來(lái)的賬號(hào)不一定要新創(chuàng)賬號(hào),但你應(yīng)該注意,這個(gè)賬號(hào)和密碼會(huì)被明文存放在master.info文件中,因此建議單獨(dú)創(chuàng)一個(gè)只擁有相關(guān)權(quán)限的賬號(hào),以減少對(duì)其它賬號(hào)的危害?。?/p>

3)創(chuàng)建新賬號(hào)使用“CREATE USER”,給賬號(hào)授權(quán)使用“GRANT”命令,如果你僅僅為了主從復(fù)制創(chuàng)建賬號(hào),只需要授予REPLICATION SLAVE權(quán)限。

4)下面來(lái)創(chuàng)建一個(gè)賬號(hào),賬號(hào)名:repl,密碼:repl123,只允許192.168.1.的IP段登錄,如下:

  1. mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl123';
  2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';

5)如果開(kāi)發(fā)防火墻,可能要配置下端口,如下:

  1. firewall-cmd --zone=public --add-port=3306/tcp --permanent
  2. firewall-cmd --reload

3、配置主數(shù)據(jù)庫(kù)

1)要主數(shù)據(jù)庫(kù),你必須要啟用二進(jìn)制日志(binary logging),并且創(chuàng)建一個(gè)唯一的Server ID,這步驟可能要重啟MySQL。

2)主服務(wù)器發(fā)送變更記錄到從服務(wù)器依賴的是二進(jìn)制日志,如果沒(méi)啟用二進(jìn)制日志,復(fù)制操作不能實(shí)現(xiàn)(主庫(kù)復(fù)制到從庫(kù))。

3)復(fù)制組中的每臺(tái)服務(wù)器都要配置唯一的Server ID,取值范圍是1到(232)?1,你自己決定取值。

4)配置二進(jìn)制日志和Server ID,你需要關(guān)閉MySQL和編輯my.cnf或者my.ini文件,在 [mysqld] 節(jié)點(diǎn)下添加配置。

5)下面是啟用二進(jìn)制日志,日志文件名以“mysql-bin”作為前綴,Server ID配置為1,如下:

  1. [mysqld]
  2. log-bin=mysql-bin
  3. server-id=1
  4. #網(wǎng)絡(luò)上還有如下配置
  5. #binlog-do-db=mstest //要同步的mstest數(shù)據(jù)庫(kù),要同步多個(gè)數(shù)據(jù)庫(kù),就多加幾個(gè)replicate-db-db=數(shù)據(jù)庫(kù)名 #binlog-ignore-db=mysql //要忽略的數(shù)據(jù)庫(kù)

提示1:如果你不配置server-id或者配置值為0,那么主服務(wù)器將拒絕所有從服務(wù)器的連接。

提示2:在使用InnoDB的事務(wù)復(fù)制,為了盡可能持久和數(shù)據(jù)一致,你應(yīng)該在my.cnf里配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1;

For the greatest possible durability and consistency in a replication setup using InnoDB with transactions, you should useinnodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.

提示3:確保主服務(wù)器里的skip-networking選項(xiàng)未啟用,如果網(wǎng)絡(luò)被禁用,你的從服務(wù)器將不能與主服務(wù)器通信并且復(fù)制失敗。

注意:

實(shí)際操作發(fā)現(xiàn) /etc/my.cnf文件和教材說(shuō)的不一樣,可能我裝的是MariaDB,如下:

image

目測(cè)文件被放到了 /etc/my.cnf.d 目錄里,如下:

image

在 /etc/my.cnf.d/server.cnf 增加相關(guān)配置,如下:

image

重啟MySQL,如圖:

image

查看主服務(wù)器狀態(tài),mysql> show master status;, 如圖:

image

(注意:記錄好File和Position,后面要用)

4、配置從數(shù)據(jù)庫(kù)

1)從服務(wù)器,同理,要分配一個(gè)唯一的Server ID,需要關(guān)閉MySQL,修改好后再重啟,如下:

  1. [mysqld]
  2. server-id=2
  3. #可以指定要復(fù)制的庫(kù)
  4. replicate-do-db = test #在master端不指定binlog-do-db,在slave端用replication-do-db來(lái)過(guò)濾
  5. replicate-ignore-db = mysql #忽略的庫(kù)
  6. #網(wǎng)上還有下面配置
  7. #relay-log=mysqld-relay-bin

提示1:如果有多個(gè)從服務(wù)器,每個(gè)服務(wù)器的server-id不能重復(fù),跟IP一樣是唯一標(biāo)識(shí),如果你沒(méi)設(shè)置server-id或者設(shè)置為0,則從服務(wù)器不會(huì)連接到主服務(wù)器。

提示2:一般你不需要在從服務(wù)器上啟用二進(jìn)制日志,如果你在從服務(wù)器上啟用二進(jìn)制日志,那你可用它來(lái)做數(shù)據(jù)備份和崩潰恢復(fù),或者做更復(fù)雜的事情(比如這個(gè)從服務(wù)器用來(lái)當(dāng)作其它從服務(wù)器的主服務(wù)器)。

2)配置連接主服務(wù)器的信息

  1. mysql> stop slave;
  2. mysql> CHANGE MASTER TO
  3. -> MASTER_HOST='192.168.1.233',
  4. -> MASTER_USER='repl',
  5. -> MASTER_PASSWORD='repl123',
  6. -> MASTER_LOG_FILE='mysql-bin.000002',
  7. -> MASTER_LOG_POS=313;
  8. mysql> start slave;

3)查看從服務(wù)器狀態(tài)

  1. mysql> show slave status \G;
image

5、測(cè)試數(shù)據(jù)同步

測(cè)試,連接主服務(wù)器 192.168.1.233,添加了表 stu_user,

然后再連接上 192.168.1.234,發(fā)現(xiàn)也自己同步創(chuàng)建了表 stu_user,如圖:

image

然后在主數(shù)據(jù)庫(kù)添加一條記錄,從數(shù)據(jù)庫(kù)也自動(dòng)添加了記錄,如圖:

image

至此,主從的配置已經(jīng)完成了, 目前是在從庫(kù)里面配置復(fù)制“test”這個(gè)庫(kù),

如果要添加其它庫(kù),可以在主服務(wù)器中添加“binlog-do-db”配置,或者在從服務(wù)器中添加“replicate-do-db”配置。

四、讀寫分離實(shí)現(xiàn)

主從配置是讀寫分離的前提,現(xiàn)在前提已經(jīng)配置好了,讀寫分離就看具體項(xiàng)目的實(shí)現(xiàn),

讀寫分離,就是“寫”的操作都在主數(shù)據(jù)庫(kù),“讀”的操作都在從數(shù)據(jù)庫(kù)!

這里我選用一個(gè)比較輕量的框架SpeedPHP來(lái)做讀寫分離演示,

這個(gè)框架做讀寫分離非常簡(jiǎn)單,按要求在配置文件填好信息即可,如圖:

image

簡(jiǎn)單寫了些增加/刪除/查詢的方法,如圖:

image
image

頁(yè)面效果如下圖:

image

再來(lái)看看兩個(gè)數(shù)據(jù)庫(kù),信息一致,如圖:

image

這個(gè)例子中,

讀取賬號(hào)列表的是從 192.168.1.234 (從數(shù)據(jù)庫(kù))上面的數(shù)據(jù)庫(kù)操作的,

添加和刪除賬號(hào)是從 192.168.1.233 (主數(shù)據(jù)庫(kù))上面的數(shù)據(jù)庫(kù)操作的,

實(shí)現(xiàn)了讀寫分離!

原文轉(zhuǎn)至: http://blog.csdn.net/envon123/article/details/76615059

參考:

官方文檔:https://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

mysql主從配置(清晰的思路):http://www.cnblogs.com/sustudy/p/4174189.html

MySQL5.6 數(shù)據(jù)庫(kù)主從(Master/Slave)同步安裝與配置詳解:http://blog.csdn.net/xlgen157387/article/details/51331244

MySQL主從架構(gòu)配置:http://blog.csdn.net/jiangsyace/article/details/50556240

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容