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

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

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

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

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

④ 通過指令,查看二進制日志坐標
show master status;

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

② 重新啟動MySQL服務(wù)
systemctl restart mysqld
③ 登錄mysql,設(shè)置主庫配置
SOURCE_LOG_FILE和SOURCE_LOG_POS設(shè)置的是主庫中剛才查詢出來的
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中的語法。如果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 | 主庫IP地址 | MASTER_HOST |
| SOURCE_USER | 連接主庫的用戶名 | MASTER_USER |
| SOURCE_PASSWORD | 連接主庫的密碼 | 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說明配置成功
3.4 測試
① 在主庫 192.168.116.129 上創(chuàng)建數(shù)據(jù)庫、表,并插入數(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');
② 在從庫 192.168.116.128 中查詢數(shù)據(jù),驗證主從是否同步
可以從下邊的圖片可以看到主庫中創(chuàng)建的數(shù)據(jù)庫、創(chuàng)建的表、插入的數(shù)據(jù)已經(jīng)成功同步到從庫中



3.5 關(guān)閉主從
如果后續(xù)要關(guān)閉主從架構(gòu),只需要在從節(jié)點上MySQ客戶端中執(zhí)行如下:
STOP SLAVE; RESET SLAVE ALL;
并修改MySQL的配置文件刪除server-id和read-only,然后重啟MySQL
總結(jié)
到此這篇關(guān)于MySQL一主一從搭建的文章就介紹到這了,更多相關(guān)MySQL一主一從搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫和Redis緩存一致性的更新策略
本文主要介紹了MySQL數(shù)據(jù)庫和Redis緩存一致性的更新策略問題,文中有詳細的代碼示例,有需要的朋友可以參考一下2023-04-04
Mysql8報錯this is incompatible with sql_mo
這篇文章主要介紹了Mysql8報錯this is incompatible with sql_mode=only_full_group_by問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
MySQL 5.7之關(guān)于SQL_MODE的設(shè)置
這篇文章主要介紹了MySQL 5.7之關(guān)于SQL_MODE的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
踩坑MySQL UNION和ORDER BY混用的問題及解決
MySQL中UNION合并多個子集時,內(nèi)部ORDER BY可能失效,解決方法:各子集添加LIMIT,外層再包裹SELECT并使用ORDER BY,確保整體排序正確2025-09-09

