MySQL基于位點(diǎn)的主從復(fù)制完整部署指南
在數(shù)據(jù)庫(kù)運(yùn)維中,主從復(fù)制是保障數(shù)據(jù)高可用、實(shí)現(xiàn)讀寫分離的核心方案?;谖稽c(diǎn)的復(fù)制作為 MySQL 最經(jīng)典的主從部署方式,具備配置靈活、兼容性強(qiáng)的特點(diǎn)。本文將從前置準(zhǔn)備到驗(yàn)證測(cè)試,一步步拆解完整部署流程,幫助運(yùn)維人員快速落地。
一、前置準(zhǔn)備(必做!)
主從復(fù)制的成功依賴基礎(chǔ)環(huán)境配置,需重點(diǎn)完成以下三項(xiàng)工作:
1. 確認(rèn)主庫(kù) Binlog 已開啟
Binlog 是主從數(shù)據(jù)同步的核心日志,主庫(kù)需通過它記錄所有數(shù)據(jù)變更操作。
- 查看當(dāng)前狀態(tài):登錄主庫(kù)執(zhí)行
show global variables like "log_bin";
若Value為ON則已開啟,OFF需手動(dòng)配置。

- 配置文件持久化(避免重啟失效):
vim /data/mysql/conf/my.cnf
添加 / 確認(rèn)配置:
log-bin=/data/mysql/binlog/mysql-bin # 指定Binlog存儲(chǔ)路徑
配置后重啟 MySQL 生效。
2. 配置主從庫(kù)唯一 server_id
server_id是 MySQL 實(shí)例的唯一標(biāo)識(shí),同一主從架構(gòu)中必須不同(取值范圍 1-2³²-1)。
- 推薦方案:使用 IP 后兩段作為
server_id(如 192.168.184.151→184151) - 主庫(kù)配置:
set global server_id=184151; # 動(dòng)態(tài)生效(無(wú)需重啟)
編輯配置文件持久化:
vim /data/mysql/conf/my.cnf server-id=184151
- 從庫(kù)配置:
set global server_id=184152; # 需與主庫(kù)不同
配置文件添加:
server-id=184152
3. 關(guān)閉 GTID 模式
本文基于傳統(tǒng)位點(diǎn)復(fù)制,需關(guān)閉 GTID(全局事務(wù)標(biāo)識(shí))避免沖突。
- 編輯主從庫(kù)配置文件:
vim /data/mysql/conf/my.cnf
添加配置:
gtid_mode=off # enforce_gtid_consistency=on # 注釋或刪除該行
- 重啟 MySQL 服務(wù):
/etc/init.d/mysql.server restart
二、部署步驟(主從協(xié)同操作)
1. 主庫(kù):創(chuàng)建復(fù)制專用用戶
從庫(kù)需通過專用用戶連接主庫(kù)讀取 Binlog,建議限制訪問 IP(生產(chǎn)環(huán)境)。
# 創(chuàng)建用戶(%表示允許所有IP,替換為從庫(kù)IP更安全) CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Uid_dQc63'; # 授予復(fù)制權(quán)限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
2. 主庫(kù):導(dǎo)出全量數(shù)據(jù)并記錄位點(diǎn)
通過mysqldump導(dǎo)出數(shù)據(jù),同時(shí)記錄備份時(shí)的 Binlog 位點(diǎn)(從庫(kù)同步起點(diǎn))。
- 執(zhí)行全量備份:
# 提前創(chuàng)建備份目錄 mkdir -p /data/backup && cd /data/backup # 導(dǎo)出所有數(shù)據(jù)庫(kù)(--databases 可指定單個(gè)庫(kù)) mysqldump -uroot -p --single-transaction --all-databases --master_data=2 --set-gtid-purged=OFF > alldb_bak.sql
關(guān)鍵參數(shù)說(shuō)明:
--single-transaction:事務(wù)級(jí)備份,不阻塞主庫(kù)寫操作--master_data=2:以注釋形式記錄 Binlog 位點(diǎn)--set-gtid-purged=OFF:適配傳統(tǒng)位點(diǎn)復(fù)制- 提取位點(diǎn)信息:
head -n 30 alldb_bak.sql
記錄輸出中的位點(diǎn)信息(示例):
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000027', MASTER_LOG_POS=717;
3. 從庫(kù):導(dǎo)入主庫(kù)全量數(shù)據(jù)
確保主從數(shù)據(jù)初始一致,避免同步?jīng)_突。
- 傳輸備份文件(主庫(kù)執(zhí)行):
scp /data/backup/alldb_bak.sql 192.168.184.152:/data/backup
- 從庫(kù)導(dǎo)入數(shù)據(jù):
cd /data/backup mysql -uroot -p < alldb_bak.sql
4. 從庫(kù):配置主從復(fù)制關(guān)系
指定主庫(kù)地址、復(fù)制用戶及同步位點(diǎn)。
CHANGE MASTER TO MASTER_HOST='192.168.184.151', # 主庫(kù)IP MASTER_USER='repl', # 復(fù)制用戶 MASTER_PASSWORD='Uid_dQc63', # 用戶密碼 MASTER_LOG_FILE='mysql-bin.000027', # 主庫(kù)Binlog文件名(從備份提?。? MASTER_LOG_POS=717; # 主庫(kù)Binlog位點(diǎn)(從備份提?。? # 啟動(dòng)復(fù)制進(jìn)程 start slave;
三、復(fù)制狀態(tài)驗(yàn)證
配置完成后,需確認(rèn)復(fù)制進(jìn)程正常運(yùn)行:
SHOW SLAVE STATUS\G

核心關(guān)注三個(gè)關(guān)鍵字段:
Slave_IO_Running:需為Yes(IO 線程正常讀取主庫(kù) Binlog)Slave_SQL_Running:需為Yes(SQL 線程正常執(zhí)行中繼日志)Seconds_Behind_Master:需為0(數(shù)據(jù)實(shí)時(shí)同步,無(wú)延遲)
四、功能測(cè)試(驗(yàn)證同步效果)
1. 主庫(kù)執(zhí)行寫操作
use maria; # 切換到目標(biāo)數(shù)據(jù)庫(kù)(需提前存在) create table repl_test(id int); # 創(chuàng)建測(cè)試表 insert into repl_test select 1; # 插入測(cè)試數(shù)據(jù)

2. 從庫(kù)驗(yàn)證同步結(jié)果
use maria; select * from repl_test;
若查詢到id=1,說(shuō)明主從數(shù)據(jù)同步正常。

五、注意事項(xiàng)
- 生產(chǎn)環(huán)境中,復(fù)制用戶應(yīng)限制為從庫(kù) IP(替換
%為具體 IP) - Binlog 文件需定期清理,避免磁盤空間溢出
- 若
Slave_SQL_Running為No,需檢查從庫(kù)數(shù)據(jù)與主庫(kù)一致性 - 同步延遲需監(jiān)控,可通過
Seconds_Behind_Master指標(biāo)告警 - 配置文件修改后必須重啟 MySQL,動(dòng)態(tài)修改僅臨時(shí)生效
以上就是MySQL基于位點(diǎn)的主從復(fù)制完整部署指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL基于位點(diǎn)主從復(fù)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql中find_in_set()函數(shù)的使用及in()用法詳解
這篇文章主要介紹了mysql中find_in_set()函數(shù)的使用以及in()用法詳解,需要的朋友可以參考下2018-07-07
MySQL之FIELD()與ORDER BY()相結(jié)合實(shí)現(xiàn)對(duì)結(jié)果的自定義排序方式
這篇文章主要介紹了MySQL之FIELD()與ORDER BY()相結(jié)合實(shí)現(xiàn)對(duì)結(jié)果的自定義排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
多次執(zhí)行mysql_fetch_array()的指針歸位問題探討
多次執(zhí)行mysql_fetch_array(),在第二次執(zhí)行的時(shí)候,如果不加處理,就不會(huì)輸出任何內(nèi)容,這種情況下只需要對(duì)循環(huán)指針進(jìn)行復(fù)位即可,感興趣的朋友可以了解下啊,或許對(duì)你有所幫助2013-01-01
MySql/Oracle數(shù)據(jù)庫(kù)項(xiàng)目改造適配信創(chuàng)國(guó)產(chǎn)數(shù)據(jù)庫(kù)的方法詳解
項(xiàng)目里用了MySQL數(shù)據(jù)庫(kù),現(xiàn)在要換成國(guó)產(chǎn)信創(chuàng)數(shù)據(jù)庫(kù),很多團(tuán)隊(duì)都在頭疼這個(gè)問題,這篇文章主要介紹了MySql/Oracle數(shù)據(jù)庫(kù)項(xiàng)目改造適配信創(chuàng)國(guó)產(chǎn)數(shù)據(jù)庫(kù)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
在MySQL concat里面使用多個(gè)單引號(hào),三引號(hào)的問題
今天小編就為大家分享一篇在MySQL concat里面使用多個(gè)單引號(hào),三引號(hào)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03
mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析
這篇文章主要介紹了mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作,結(jié)合實(shí)例形式分析了mysql創(chuàng)建及使用多個(gè)觸發(fā)器的相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
Mysql 數(shù)據(jù)庫(kù)開啟binlog的實(shí)現(xiàn)步驟
本文主要介紹了Mysql 數(shù)據(jù)庫(kù)開啟binlog的實(shí)現(xiàn)步驟,對(duì)于運(yùn)維或架構(gòu)人員來(lái)說(shuō),開啟binlog日志功能非常重要,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
MySQL中CREATE DATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)的示例
在MySQL中,可以使用CREATE DATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port
這篇文章主要介紹了安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port=0.0‘的解決方法,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06

