MySQL一主一從搭建詳細(xì)講解(附圖文)
1 概述
主從復(fù)制是指將主數(shù)據(jù)庫(kù)的 DDL 和 DML 操作通過(guò)二進(jìn)制日志傳到從庫(kù)服務(wù)器中,然后在從庫(kù)上對(duì)這 些日志重新執(zhí)行(也叫重做),從而使得從庫(kù)和主庫(kù)的數(shù)據(jù)保持同步。
MySQL支持一臺(tái)主庫(kù)同時(shí)向多臺(tái)從庫(kù)進(jìn)行復(fù)制, 從庫(kù)同時(shí)也可以作為其他從服務(wù)器的主庫(kù),實(shí)現(xiàn)鏈狀 復(fù)制。

MySQL 復(fù)制的優(yōu)點(diǎn)主要包含以下三個(gè)方面:
- 主庫(kù)出現(xiàn)問(wèn)題,可以快速切換到從庫(kù)提供服務(wù)。
- 實(shí)現(xiàn)讀寫分離,降低主庫(kù)的訪問(wèn)壓力。
- 可以在從庫(kù)中執(zhí)行備份,以避免備份期間影響主庫(kù)服務(wù)。
2 原理
MySQL主從復(fù)制的核心就是 二進(jìn)制日志,具體的過(guò)程如下:

從上圖來(lái)看,復(fù)制分成三步:
- Master 主庫(kù)在事務(wù)提交時(shí),會(huì)把數(shù)據(jù)變更記錄在二進(jìn)制日志文件 Binlog 中。
- 從庫(kù)讀取主庫(kù)的二進(jìn)制日志文件 Binlog ,寫入到從庫(kù)的中繼日志 Relay Log 。
- slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。
3 搭建
3.1 準(zhǔn)備

關(guān)閉兩臺(tái)服務(wù)器的防火墻
systemctl stop firewalld systemctl disable firewalld
如果不想關(guān)閉防火墻開放MySQL的端口
firewall-cmd --zone=public --add-port=3306/tcp-permanent firewall-cmd --reload
準(zhǔn)備好兩臺(tái)服務(wù)器之后,在上述的兩臺(tái)服務(wù)器中分別安裝好MySQL,并完成基礎(chǔ)的初始化準(zhǔn)備(安裝、 密碼配置等操作)工作。 其中:
- 192.168.116.129 作為主機(jī)
- 192.168.116.128 作為從機(jī)
3.2 主庫(kù)配置
① 修改配置文件 /etc/my.cnf
#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一,取值范圍:1 – 232-1,默認(rèn)為1 server-id=1 #是否只讀,1 代表只讀, 0 代表讀寫 read-only=0 #忽略的數(shù)據(jù), 指不需要同步的數(shù)據(jù)庫(kù) #binlog-ignore-db=mysql #指定同步的數(shù)據(jù)庫(kù) #binlog-do-db=db01

② 重啟MySQL服務(wù)器
systemctl restart mysqld
③ 登錄mysql,創(chuàng)建遠(yuǎn)程連接的賬號(hào),并授予主從復(fù)制權(quán)限
#創(chuàng)建itcast用戶,并設(shè)置密碼,該用戶可在任意主機(jī)連接該MySQL服務(wù) create user 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Itcast@123456'; #為 'itcast'@'%' 用戶分配主從復(fù)制權(quán)限 GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

④ 通過(guò)指令,查看二進(jìn)制日志坐標(biāo)
show master status;

字段含義說(shuō)明:
- file : 從哪個(gè)日志文件開始推送日志文件
- position : 從哪個(gè)位置開始推送日志
- binlog_ignore_db : 指定不需要同步的數(shù)據(jù)庫(kù)
3.3 從庫(kù)配置
① 修改配置文件 /etc/my.cnf
#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一,取值范圍:1 – 2^32-1,和主庫(kù)不一樣即可 server-id=2 #是否只讀,1 代表只讀, 0 代表讀寫 read-only=1

② 重新啟動(dòng)MySQL服務(wù)
systemctl restart mysqld
③ 登錄mysql,設(shè)置主庫(kù)配置
SOURCE_LOG_FILE和SOURCE_LOG_POS設(shè)置的是主庫(kù)中剛才查詢出來(lái)的
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.116.129', SOURCE_USER='itcast', SOURCE_PASSWORD='Itcast@123456', SOURCE_LOG_FILE='binlog.000006', SOURCE_LOG_POS=370;

上述是8.0.23中的語(yǔ)法。如果mysql是 8.0.23 之前的版本,執(zhí)行如下SQL:
CHANGE MASTER TO MASTER_HOST='192.168.116.129', MASTER_USER='itcast', MASTER_PASSWORD='Itcast@123456', MASTER_LOG_FILE='binlog.000006', MASTER_LOG_POS=370;
| 參數(shù)名 | 含義 | 8.0.23之前 |
|---|---|---|
| SOURCE_HOST | 主庫(kù)IP地址 | MASTER_HOST |
| SOURCE_USER | 連接主庫(kù)的用戶名 | MASTER_USER |
| SOURCE_PASSWORD | 連接主庫(kù)的密碼 | MASTER_PASSWORD |
| SOURCE_LOG_FILE | binlog日志文件名 | MASTER_LOG_FILE |
| SOURCE_LOG_POS | binlog日志文件位置 | MASTER_LOG_POS |
④ 開啟同步操作
start replica ; #8.0.22之后 start slave ; #8.0.22之前

⑤ 查看主從同步狀態(tài)
show replica status ; #8.0.22之后 show slave status ; #8.0.22之前

Replica_IO_Running: Yes和Replica_SQL_Running: Yes說(shuō)明配置成功
3.4 測(cè)試
① 在主庫(kù) 192.168.116.129 上創(chuàng)建數(shù)據(jù)庫(kù)、表,并插入數(shù)據(jù)
create database itdemo3; use itdemo3; create table tb_user( id int(11) primary key not null auto_increment, name varchar(50) not null, sex varchar(1) ); insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'), (null,'Dawn','1');
② 在從庫(kù) 192.168.116.128 中查詢數(shù)據(jù),驗(yàn)證主從是否同步
可以從下邊的圖片可以看到主庫(kù)中創(chuàng)建的數(shù)據(jù)庫(kù)、創(chuàng)建的表、插入的數(shù)據(jù)已經(jīng)成功同步到從庫(kù)中



3.5 關(guān)閉主從
如果后續(xù)要關(guān)閉主從架構(gòu),只需要在從節(jié)點(diǎn)上MySQ客戶端中執(zhí)行如下:
STOP SLAVE; RESET SLAVE ALL;
并修改MySQL的配置文件刪除server-id和read-only,然后重啟MySQL
總結(jié)
到此這篇關(guān)于MySQL一主一從搭建的文章就介紹到這了,更多相關(guān)MySQL一主一從搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql實(shí)戰(zhàn)練習(xí)之簡(jiǎn)單圖書管理系統(tǒng)
由于課設(shè)需要做這個(gè),于是就抽了點(diǎn)閑余時(shí)間,寫了下,用Mysql與Java,基本全部都涉及到,包括借書/還書,以及書籍信息的更新,查看所有的書籍。需要的朋友可以參考下2021-09-09
mysql如何將sql查詢的結(jié)果以百分比展示出來(lái)
這篇文章主要給大家介紹了關(guān)于mysql如何將sql查詢的結(jié)果以百分比展示出來(lái)的相關(guān)資料,用到了MySQL字符串處理中的兩個(gè)函數(shù)concat()和left()實(shí)現(xiàn)查詢結(jié)果以百分比顯示,需要的朋友可以參考下2023-08-08
Mysql:The user specified as a definer (''xxx@''%'') does not
今天小編就為大家分享一篇關(guān)于Mysql:The user specified as a definer ('xxx@'%') does not exist的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
MySQL中獲取最大值MAX()函數(shù)和ORDER BY … LIMIT 1比較
mysql取最大值的的是max 和order by兩種方式,同時(shí)也大多數(shù)人人為max的效率更高,在本文中,我們將介紹MySQL中MAX()和ORDER BY … LIMIT 1兩種獲取最大值的方法以及它們性能上的差異,同時(shí)我們將探討這種性能差異的原因,并提供一些優(yōu)化建議2024-03-03
教你如何讓spark?sql寫mysql的時(shí)候支持update操作
spark提供了一個(gè)枚舉類,用來(lái)支撐對(duì)接數(shù)據(jù)源的操作模式,本文重點(diǎn)給大家介紹如何讓spark?sql寫mysql的時(shí)候支持update操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-02-02
MySQL數(shù)據(jù)庫(kù)中sql表設(shè)計(jì)的注意事項(xiàng)
實(shí)際開發(fā)中一個(gè)項(xiàng)目通常需要很多張表才能完成,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)中sql表設(shè)計(jì)的注意事項(xiàng),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
MySQL錯(cuò)誤:You can‘t specify target table&n
在編寫MySQL的UPDATE或DELETE語(yǔ)句時(shí),如果子查詢中直接引用了要操作的目標(biāo)表,可能會(huì)遇到一個(gè)常見(jiàn)的錯(cuò)誤:You can’t specify target table ‘xxx’ for update in FROM clause,這個(gè)錯(cuò)誤讓許多開發(fā)者感到困惑,本文將深入分析其原因,并提供多種解決方案,2025-02-02
windows下mysql 8.0.16 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了windows下mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

