本篇文章給大家?guī)?lái)了關(guān)于mysql的相關(guān)知識(shí),其中主要介紹了怎樣快速搭建主從復(fù)制架構(gòu)的相關(guān)問(wèn)題,MySQL數(shù)據(jù)庫(kù)提供的主從復(fù)制功能可以方便的實(shí)現(xiàn)數(shù)據(jù)在多臺(tái)服務(wù)器自動(dòng)備份,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的拓展,極大的加強(qiáng)了數(shù)據(jù)的安全性,希望對(duì)大家有幫助。
推薦學(xué)習(xí):mysql教程
1. 主從復(fù)制與讀寫(xiě)分離
1.1 主從復(fù)制(數(shù)據(jù)層面)
主從復(fù)制是讀寫(xiě)分離的前提。MySQL數(shù)據(jù)庫(kù)提供的主從復(fù)制功能可以方便的實(shí)現(xiàn)數(shù)據(jù)在多臺(tái)服務(wù)器自動(dòng)備份,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的拓展,極大的加強(qiáng)了數(shù)據(jù)的安全性。同時(shí),實(shí)現(xiàn)主從復(fù)制之后,可以通過(guò)實(shí)現(xiàn)讀寫(xiě)分離進(jìn)一步加強(qiáng)數(shù)據(jù)庫(kù)的負(fù)載性能。
如圖所示便是主從復(fù)制的大致實(shí)現(xiàn)流程。
1.2 讀寫(xiě)分離(業(yè)務(wù)層面)
讀寫(xiě)分離是建立在主從復(fù)制的基礎(chǔ)上,只有實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的主從復(fù)制,才能進(jìn)一步的實(shí)現(xiàn)讀寫(xiě)分離。讀寫(xiě)分離可以理解為所有的查詢(xún)操作在子數(shù)據(jù)庫(kù)進(jìn)行,所有的寫(xiě)操作在主數(shù)據(jù)庫(kù)進(jìn)行。當(dāng)數(shù)據(jù)寫(xiě)入主數(shù)據(jù)庫(kù)后,通過(guò)主從復(fù)制將數(shù)據(jù)備份到子數(shù)據(jù)庫(kù)中,從而確保數(shù)據(jù)的一致性。
2. 實(shí)現(xiàn)
我們先來(lái)了解一下實(shí)現(xiàn)主從復(fù)制的原理:
- 首先當(dāng)主數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)生變化后,會(huì)將變化記錄寫(xiě)入binlog日志中。
- slave數(shù)據(jù)庫(kù)會(huì)在一定時(shí)間內(nèi)對(duì)master數(shù)據(jù)庫(kù)中的binlog日志進(jìn)行探測(cè),如果發(fā)生改變,則請(qǐng)求master日志文件信息。
了解其原理之后,我們需要知道開(kāi)啟主從復(fù)制的前提:
-
master節(jié)點(diǎn)需要開(kāi)啟binlog日志(mysql默認(rèn)不開(kāi)啟binlog)
-
slave節(jié)點(diǎn) ,指定某個(gè)binlog文件,以及同步的offset
-
指定master節(jié)點(diǎn)的ip
-
執(zhí)行master節(jié)點(diǎn)的用戶(hù)名和密碼
-
現(xiàn)在大致我們都了解了,接下來(lái)我們搭建一個(gè)一主一從的數(shù)據(jù)庫(kù)模式,演示一下數(shù)據(jù)庫(kù)主從搭建的配置過(guò)程。
準(zhǔn)備兩臺(tái)CentOS服務(wù)器,并提前安裝好mysql5.7。
2.1 開(kāi)啟master服務(wù)器的binlog日志
編輯mysql的my.cnf文件:(安裝方式不同,可能文件位置不同,具體問(wèn)題具體分析~)
vim /etc/my.cnf
原本文件是沒(méi)有以下內(nèi)容的,需要我們自行添加。我這邊是值對(duì)myslave庫(kù)進(jìn)行數(shù)據(jù)的主從復(fù)制
server-id = 1 #server-id 服務(wù)器唯一標(biāo)識(shí)log_bin = master-bin #log_bin 啟動(dòng)MySQL二進(jìn)制日志log_bin_index = master-bin.index binlog_do_db = myslave #binlog_do_db 指定記錄二進(jìn)制日志的數(shù)據(jù)庫(kù) 這兩個(gè)指定可以不添加binlog_ignore_db = mysql #binlog_ignore_db 指定不記錄二進(jìn)制日志的數(shù)據(jù)庫(kù)
使用如下命令重啟mysql。linux版本不一樣可能命令不同。
service mysql restart
啟動(dòng)成功后,我們可以通過(guò)下面的語(yǔ)句看到bin-log開(kāi)啟情況:(直接在Navicat中查詢(xún)即可)
show variables like 'log_bin%';
2.2 遠(yuǎn)程訪問(wèn)
#允許遠(yuǎn)程用戶(hù)訪問(wèn) GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.221.131' IDENTIFIED BY '123456' WITH GRANT OPTION; #刷新 FLUSH PRIVILEGES;
2.3 slave節(jié)點(diǎn)配置
- 首先在master節(jié)點(diǎn),通過(guò)下面的命令了解master節(jié)點(diǎn)的狀態(tài),得到如下圖所示的信息。
show master status;
-
修改相關(guān)配置
vim /etc/my.cnf
添加相關(guān)信息:
server-id = 2 #唯一標(biāo)識(shí)relay-log = slave-relay-bin relay-log-index = slave-relay-bin.index replicate-do-db=myslave #備份數(shù)據(jù)庫(kù) 對(duì)應(yīng)master中設(shè)置的,可以不設(shè)置replicate-ignore-db=mysql #忽略數(shù)據(jù)庫(kù)
記得重啟服務(wù);
service mysql restart
-
在slave節(jié)點(diǎn)執(zhí)行如下命令。
change master to master_host='192.168.221.128',master_user='root',master_password='123456',master_log_file='binlog.000009',master_log_pos=2339;
master_log_file是第一步得到的file名稱(chēng);
master_log_pos是第一步得到的同步位置點(diǎn);
-
啟動(dòng)slave同步
start slave;
-
查看同步狀態(tài),得到下圖所示的狀態(tài),表示主從同步搭建成功??梢栽谥鲙?kù)中創(chuàng)建表測(cè)試。
show slave statusG
推薦學(xué)習(xí):mysql學(xué)習(xí)教程