CentOS 7搭建MySQL主從復(fù)制集群的全過程
導(dǎo)讀:在實際生產(chǎn)環(huán)境中,單個 MySQL 實例存在單點故障和性能瓶頸。本文將以 CentOS 7 為例,手把手教你搭建一套標(biāo)準(zhǔn)的 MySQL 主從復(fù)制集群(Master-Slave Replication),實現(xiàn)讀寫分離與數(shù)據(jù)熱備。全文包含環(huán)境準(zhǔn)備、安裝配置、主從搭建、驗證優(yōu)化等完整步驟,并輔以流程圖與操作示意圖,助你快速落地高可用架構(gòu)。
1. 集群架構(gòu)概覽
MySQL 主從復(fù)制是一種異步復(fù)制機(jī)制,主庫(Master)記錄所有寫操作到二進(jìn)制日志(binlog),從庫(Slave)通過 I/O 線程拉取日志并重放,從而實現(xiàn)數(shù)據(jù)同步。

架構(gòu)優(yōu)勢:
- 讀寫分離,提升讀并發(fā)能力
- 數(shù)據(jù)實時備份,主庫故障可快速切換
- 支持在線備份(從庫備份不影響主庫)
2. 環(huán)境準(zhǔn)備
| 主機(jī)名 | IP 地址 | 角色 | 操作系統(tǒng) |
|---|---|---|---|
| db-master | 192.168.1.10 | Master | CentOS 7.9 |
| db-slave1 | 192.168.1.11 | Slave | CentOS 7.9 |
注意:所有節(jié)點需關(guān)閉防火墻或開放 3306 端口,并配置好主機(jī)名解析(
/etc/hosts)。
3. 安裝 MySQL(使用 Yum 源,避免編譯)
傳統(tǒng)編譯方式(./configure && make && make install)耗時且易出錯,強烈推薦使用官方 Yum 源。
3.1 添加 MySQL Yum 源
在兩臺節(jié)點上分別執(zhí)行:
# 下載 MySQL 8.0 官方源(也可選擇 5.7) wget https://repo.mysql.com//mysql80-community-release-el7-11.noarch.rpm rpm -ivh mysql80-community-release-el7-11.noarch.rpm # 更新 yum 緩存 yum clean all yum makecache
3.2 安裝 MySQL Server
yum install -y mysql-community-server
3.3 啟動并初始化
# 啟動 MySQL 服務(wù) systemctl start mysqld systemctl enable mysqld # 查看臨時密碼(MySQL 8.0 默認(rèn)生成) grep 'temporary password' /var/log/mysqld.log
輸出示例:2025-05-22T06:35:12.123456Z 1 [Note] A temporary password is generated for root@localhost: >kL9#xW?rQ2i
3.4 安全配置(修改密碼)
mysql -uroot -p # 輸入臨時密碼后執(zhí)行: ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPwd123!'; FLUSH PRIVILEGES;
密碼強度要求:至少 8 位,包含大小寫字母、數(shù)字和特殊字符。
4. 配置主從復(fù)制
4.1 主庫配置(Master)
編輯 /etc/my.cnf,在 [mysqld] 段添加以下內(nèi)容:
[mysqld] # 服務(wù)器 ID(主從各節(jié)點必須唯一) server-id = 1 # 開啟二進(jìn)制日志 log-bin = mysql-bin # 需要復(fù)制的數(shù)據(jù)庫(可選,默認(rèn)所有) # binlog-do-db = exampledb # 忽略復(fù)制的數(shù)據(jù)庫 # binlog-ignore-db = mysql # 二進(jìn)制日志格式(推薦 ROW) binlog_format = ROW # 確保行鏡像完整 binlog_row_image = FULL # 過期日志清理(保留 7 天) expire_logs_days = 7
重啟主庫:
systemctl restart mysqld
登錄主庫,創(chuàng)建復(fù)制專用用戶:
CREATE USER 'replica'@'%' IDENTIFIED BY 'ReplicaPass123!'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
查看主庫狀態(tài)(記錄 File 和 Position):
SHOW MASTER STATUS;
輸出示例:
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 157 | | | +------------------+----------+--------------+------------------+
4.2 從庫配置(Slave)
編輯 /etc/my.cnf:
[mysqld] server-id = 2 # 開啟中繼日志 relay-log = mysql-relay-bin # 只讀模式(可選) read_only = 1 # 禁止從庫執(zhí)行寫操作(超級用戶除外) super_read_only = 1
重啟從庫:
systemctl restart mysqld
在從庫上執(zhí)行同步配置(替換 MASTER_LOG_FILE 和 MASTER_LOG_POS 為主庫查詢到的值):
CHANGE MASTER TO MASTER_HOST = '192.168.1.10', MASTER_USER = 'replica', MASTER_PASSWORD = 'ReplicaPass123!', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 157;
啟動從庫復(fù)制線程:
START SLAVE;
檢查同步狀態(tài):
SHOW SLAVE STATUS\G
重點關(guān)注以下兩個字段應(yīng)為 Yes:
Slave_IO_Running: YesSlave_SQL_Running: Yes
5. 驗證主從復(fù)制
5.1 在主庫創(chuàng)建測試數(shù)據(jù)
CREATE DATABASE testdb; USE testdb; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t1 VALUES (1, 'Master Data');
5.2 在從庫查詢
USE testdb; SELECT * FROM t1;
如果能看到相同數(shù)據(jù),說明主從同步成功。
6. 常見問題與排障
| 問題現(xiàn)象 | 可能原因 | 解決方法 |
|---|---|---|
Slave_IO_Running: Connecting | 網(wǎng)絡(luò)不通 / 用戶權(quán)限錯誤 | 檢查防火墻、MySQL 端口、復(fù)制用戶權(quán)限 |
Slave_SQL_Running: No | SQL 語句執(zhí)行沖突(如主鍵重復(fù)) | 查看 Last_Error 字段,跳過或修復(fù)數(shù)據(jù) |
| 主從延遲大 | 從庫硬件差 / 大事務(wù) | 開啟并行復(fù)制(slave_parallel_workers) |
跳過錯誤示例(謹(jǐn)慎使用):
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
7. 操作流程圖

8. 高可用延伸:MHA / InnoDB Cluster
主從復(fù)制雖然實現(xiàn)了數(shù)據(jù)同步,但故障轉(zhuǎn)移仍需人工介入。生產(chǎn)環(huán)境可考慮:
- MHA(Master High Availability):自動監(jiān)控并切換主庫。
- MySQL Group Replication(MGR):內(nèi)置的分布式復(fù)制機(jī)制,提供強一致性。
- MySQL InnoDB Cluster:基于 MGR + MySQL Router 的官方高可用方案。
后續(xù)文章將詳細(xì)講解這些高級架構(gòu)。
9. 總結(jié)
本文摒棄了過時的源碼編譯方式,采用官方 Yum 源在 CentOS 7 上快速搭建 MySQL 主從復(fù)制集群,并提供了完整的驗證步驟與排障指南。通過該架構(gòu),你可以輕松實現(xiàn)讀寫分離和數(shù)據(jù)備份,為業(yè)務(wù)系統(tǒng)提供更穩(wěn)定的數(shù)據(jù)庫服務(wù)。
關(guān)鍵點回顧:
- ? 主從核心:二進(jìn)制日志(binlog) + 中繼日志(relay log)
- ? 必須配置唯一的
server-id - ? 從庫
read_only防止誤寫 - ? 定期監(jiān)控
SHOW SLAVE STATUS
以上就是CentOS 7搭建MySQL主從復(fù)制集群的全過程的詳細(xì)內(nèi)容,更多關(guān)于CentOS 7搭建MySQL主從復(fù)制集群的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Ubuntu Server下MySql數(shù)據(jù)庫備份腳本代碼
為了mysql數(shù)據(jù)庫的安全,我們需要定時備份mysql數(shù)據(jù)庫,這里提供下腳本代碼,需要的朋友可以參考下2013-06-06
記一次mysql5.7測試數(shù)據(jù)庫被刪表的問題
這篇文章主要介紹了記一次mysql5.7測試數(shù)據(jù)庫被刪表的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
windows下安裝mysql-8.0.18-winx64的教程(圖文詳解)
這篇文章主要介紹了windows下安裝mysql-8.0.18-winx64,需要的朋友可以參考下2019-12-12
mysql數(shù)據(jù)遷移到Oracle的正確方法
這篇文章主要為大家詳細(xì)介紹了mysql數(shù)據(jù)遷移到Oracle的正確方法,文中步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02

