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

架構(gòu)優(yōu)勢(shì):
- 讀寫分離,提升讀并發(fā)能力
- 數(shù)據(jù)實(shí)時(shí)備份,主庫(kù)故障可快速切換
- 支持在線備份(從庫(kù)備份不影響主庫(kù))
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é)點(diǎn)需關(guān)閉防火墻或開放 3306 端口,并配置好主機(jī)名解析(
/etc/hosts)。
3. 安裝 MySQL(使用 Yum 源,避免編譯)
傳統(tǒng)編譯方式(./configure && make && make install)耗時(shí)且易出錯(cuò),強(qiáng)烈推薦使用官方 Yum 源。
3.1 添加 MySQL Yum 源
在兩臺(tái)節(jié)點(diǎn)上分別執(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 啟動(dòng)并初始化
# 啟動(dòng) MySQL 服務(wù) systemctl start mysqld systemctl enable mysqld # 查看臨時(shí)密碼(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 # 輸入臨時(shí)密碼后執(zhí)行: ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPwd123!'; FLUSH PRIVILEGES;
密碼強(qiáng)度要求:至少 8 位,包含大小寫字母、數(shù)字和特殊字符。
4. 配置主從復(fù)制
4.1 主庫(kù)配置(Master)
編輯 /etc/my.cnf,在 [mysqld] 段添加以下內(nèi)容:
[mysqld] # 服務(wù)器 ID(主從各節(jié)點(diǎn)必須唯一) server-id = 1 # 開啟二進(jìn)制日志 log-bin = mysql-bin # 需要復(fù)制的數(shù)據(jù)庫(kù)(可選,默認(rèn)所有) # binlog-do-db = exampledb # 忽略復(fù)制的數(shù)據(jù)庫(kù) # binlog-ignore-db = mysql # 二進(jìn)制日志格式(推薦 ROW) binlog_format = ROW # 確保行鏡像完整 binlog_row_image = FULL # 過(guò)期日志清理(保留 7 天) expire_logs_days = 7
重啟主庫(kù):
systemctl restart mysqld
登錄主庫(kù),創(chuàng)建復(fù)制專用用戶:
CREATE USER 'replica'@'%' IDENTIFIED BY 'ReplicaPass123!'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
查看主庫(kù)狀態(tài)(記錄 File 和 Position):
SHOW MASTER STATUS;
輸出示例:
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 157 | | | +------------------+----------+--------------+------------------+
4.2 從庫(kù)配置(Slave)
編輯 /etc/my.cnf:
[mysqld] server-id = 2 # 開啟中繼日志 relay-log = mysql-relay-bin # 只讀模式(可選) read_only = 1 # 禁止從庫(kù)執(zhí)行寫操作(超級(jí)用戶除外) super_read_only = 1
重啟從庫(kù):
systemctl restart mysqld
在從庫(kù)上執(zhí)行同步配置(替換 MASTER_LOG_FILE 和 MASTER_LOG_POS 為主庫(kù)查詢到的值):
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;
啟動(dòng)從庫(kù)復(fù)制線程:
START SLAVE;
檢查同步狀態(tài):
SHOW SLAVE STATUS\G
重點(diǎn)關(guān)注以下兩個(gè)字段應(yīng)為 Yes:
Slave_IO_Running: YesSlave_SQL_Running: Yes
5. 驗(yàn)證主從復(fù)制
5.1 在主庫(kù)創(chuàng)建測(cè)試數(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 在從庫(kù)查詢
USE testdb; SELECT * FROM t1;
如果能看到相同數(shù)據(jù),說(shuō)明主從同步成功。
6. 常見問題與排障
| 問題現(xiàn)象 | 可能原因 | 解決方法 |
|---|---|---|
Slave_IO_Running: Connecting | 網(wǎng)絡(luò)不通 / 用戶權(quán)限錯(cuò)誤 | 檢查防火墻、MySQL 端口、復(fù)制用戶權(quán)限 |
Slave_SQL_Running: No | SQL 語(yǔ)句執(zhí)行沖突(如主鍵重復(fù)) | 查看 Last_Error 字段,跳過(guò)或修復(fù)數(shù)據(jù) |
| 主從延遲大 | 從庫(kù)硬件差 / 大事務(wù) | 開啟并行復(fù)制(slave_parallel_workers) |
跳過(guò)錯(cuò)誤示例(謹(jǐn)慎使用):
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
7. 操作流程圖

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

