MySQL互為主從(雙向同步)部署超詳細教程
(CentOS 6/7 適用)
一、環(huán)境說明
| 服務(wù)器角色 | IP 地址 | 系統(tǒng)版本 | MySQL 版本 | 核心作用 |
|---|---|---|---|---|
| 服務(wù)器 A | 192.168.1.51 | CentOS 6/7 | MySQL 5.7.17 | 作為 B 的主庫 + 作為 B 的從庫 |
| 服務(wù)器 B | 192.168.1.52 | CentOS 6/7 | MySQL 5.7.17 | 作為 A 的主庫 + 作為 A 的從庫 |
目標(biāo):實現(xiàn) A、B 雙向數(shù)據(jù)同步,確保兩邊數(shù)據(jù)實時一致,支持讀寫分離或故障備份。
二、前置準(zhǔn)備(兩臺服務(wù)器均執(zhí)行)
1. 確認(rèn) MySQL 狀態(tài)
先驗證 MySQL 版本一致性和服務(wù)運行狀態(tài),避免版本差異導(dǎo)致同步失敗。
# 1. 檢查MySQL版本(需均為5.7.17) mysql -V # 2. 確認(rèn)MySQL服務(wù)正常運行 # CentOS 7 systemctl status mysqld # CentOS 6 service mysqld status
2. 關(guān)閉防火墻(測試環(huán)境簡化)
生產(chǎn)環(huán)境可改為開放 3306 端口,測試階段直接關(guān)閉防火墻更高效。
# CentOS 7 systemctl stop firewalld && systemctl disable firewalld # CentOS 6 service iptables stop && chkconfig iptables off
三、配置服務(wù)器 A(192.168.1.51)
1. 修改 MySQL 核心配置文件
編輯my.cnf,僅保留互為主從必需配置,減少冗余。
vim /etc/my.cnf
在[mysqld]區(qū)塊添加以下內(nèi)容:
[mysqld] server-id = 51 # 唯一ID,不可與B重復(fù)(建議用IP后兩位) log_bin = mysql-bin # 開啟二進制日志(主從同步核心依賴) log_slave_updates = 1 # 允許同步的數(shù)據(jù)再次生成日志(互為主從關(guān)鍵) auto_increment_increment = 2 # 自增步長為2,避免主鍵沖突 auto_increment_offset = 1 # A生成奇數(shù)ID(1、3、5...)
2. 重啟 MySQL 使配置生效
# CentOS 7 systemctl restart mysqld # CentOS 6 service mysqld restart
3. 創(chuàng)建同步賬號(供服務(wù)器 B 連接)
登錄 MySQL,創(chuàng)建用于同步的賬號repluser,并授予復(fù)制權(quán)限。
# 登錄MySQL(輸入root密碼) mysql -u root -p
執(zhí)行 SQL 命令:
-- 允許服務(wù)器B(192.168.1.52)使用repluser賬號連接 GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.52' IDENTIFIED BY 'Sync@123'; -- 刷新權(quán)限,確保配置生效 FLUSH PRIVILEGES; -- 查看A的主庫狀態(tài)(記錄File和Position,后續(xù)配置B需用) SHOW MASTER STATUS;
記錄輸出結(jié)果(示例):
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 438 | | | +------------------+----------+--------------+------------------+
四、配置服務(wù)器 B(192.168.1.52)
1. 修改 MySQL 核心配置文件
與服務(wù)器 A 類似,僅調(diào)整server-id和auto_increment_offset。
vim /etc/my.cnf
在[mysqld]區(qū)塊添加:
[mysqld] server-id = 52 # 唯一ID,與A不同 log_bin = mysql-bin # 開啟二進制日志 log_slave_updates = 1 # 互為主從關(guān)鍵配置 auto_increment_increment = 2 # 自增步長與A一致 auto_increment_offset = 2 # B生成偶數(shù)ID(2、4、6...)
2. 重啟 MySQL 服務(wù)
# CentOS 7 systemctl restart mysqld # CentOS 6 service mysqld restart
3. 創(chuàng)建同步賬號(供服務(wù)器 A 連接)
登錄 MySQL,創(chuàng)建給 A 用的同步賬號。
mysql -u root -p
執(zhí)行 SQL 命令:
-- 允許服務(wù)器A(192.168.1.51)使用repluser賬號連接 GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.51' IDENTIFIED BY 'Sync@123'; -- 刷新權(quán)限 FLUSH PRIVILEGES; -- 查看B的主庫狀態(tài)(記錄File和Position,后續(xù)配置A需用) SHOW MASTER STATUS;
記錄輸出結(jié)果(示例):
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 438 | | | +------------------+----------+--------------+------------------+
五、配置雙向同步(關(guān)鍵步驟)
1. 服務(wù)器 A 同步服務(wù)器 B 的數(shù)據(jù)(A 作為 B 的從庫)
登錄服務(wù)器 A 的 MySQL,配置 B 為主庫信息。
mysql -u root -p
執(zhí)行 SQL(替換為 B 的SHOW MASTER STATUS結(jié)果):
-- 停止現(xiàn)有從庫進程(若之前配置過) STOP SLAVE; -- 配置B為主庫 CHANGE MASTER TO MASTER_HOST = '192.168.1.52', # B的IP MASTER_USER = 'repluser', # B上創(chuàng)建的同步賬號 MASTER_PASSWORD = 'Sync@123', # 同步密碼 MASTER_LOG_FILE = 'mysql-bin.000001', # B的File MASTER_LOG_POS = 438; # B的Position -- 啟動從庫同步 START SLAVE;
2. 服務(wù)器 B 同步服務(wù)器 A 的數(shù)據(jù)(B 作為 A 的從庫)
登錄服務(wù)器 B 的 MySQL,配置 A 為主庫信息。
mysql -u root -p
執(zhí)行 SQL(替換為 A 的SHOW MASTER STATUS結(jié)果):
-- 停止現(xiàn)有從庫進程 STOP SLAVE; -- 配置A為主庫 CHANGE MASTER TO MASTER_HOST = '192.168.1.51', # A的IP MASTER_USER = 'repluser', # A上創(chuàng)建的同步賬號 MASTER_PASSWORD = 'Sync@123', # 同步密碼 MASTER_LOG_FILE = 'mysql-bin.000001', # A的File MASTER_LOG_POS = 438; # A的Position -- 啟動從庫同步 START SLAVE;
六、驗證同步狀態(tài)
1. 檢查從庫運行狀態(tài)
在 A 和 B 上分別執(zhí)行以下命令,核心驗證Slave_IO_Running和Slave_SQL_Running是否均為Yes。
SHOW SLAVE STATUS\G; # \G表示豎屏顯示,更易讀
關(guān)鍵輸出(需均為 Yes):
Slave_IO_Running: Yes # 與主庫連接正常 Slave_SQL_Running: Yes # 同步日志執(zhí)行正常
2. 功能測試(雙向同步驗證)
測試 1:A 寫入數(shù)據(jù),B 驗證同步
- 在 A 上創(chuàng)建測試數(shù)據(jù):
-- A上執(zhí)行
CREATE DATABASE IF NOT EXISTS sync_test;
USE sync_test;
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, info VARCHAR(50));
INSERT INTO t1 (info) VALUES ('來自A的測試數(shù)據(jù)'); # ID應(yīng)為1(奇數(shù))- 在 B 上查看數(shù)據(jù)是否同步:
-- B上執(zhí)行 USE sync_test; SELECT * FROM t1; # 應(yīng)返回ID=1的記錄
測試 2:B 寫入數(shù)據(jù),A 驗證同步
- 在 B 上插入數(shù)據(jù):
-- B上執(zhí)行
INSERT INTO sync_test.t1 (info) VALUES ('來自B的測試數(shù)據(jù)'); # ID應(yīng)為2(偶數(shù))- 在 A 上查看數(shù)據(jù)是否同步:
-- A上執(zhí)行 USE sync_test; SELECT * FROM t1; # 應(yīng)返回ID=1和ID=2的兩條記錄
七、常見問題排查
Slave_IO_Running: Connecting
- 原因:IP 錯誤、同步賬號密碼錯誤、防火墻未關(guān)閉。
- 解決:核對
CHANGE MASTER TO中的 IP、賬號、密碼;確保防火墻已關(guān)閉。
Slave_SQL_Running: No
- 原因:主從數(shù)據(jù)不一致、主鍵沖突。
- 解決:確保初始數(shù)據(jù)一致;檢查
auto_increment配置是否正確(A 奇數(shù)、B 偶數(shù))。
同步延遲
- 原因:數(shù)據(jù)量過大、服務(wù)器性能不足。
- 解決:優(yōu)化 MySQL 配置(如增大
innodb_buffer_pool_size);避免大事務(wù)。
八、總結(jié)
- 互為主從的核心是雙向配置主從關(guān)系,A 同步 B、B 同步 A,通過
log_slave_updates = 1支撐雙向日志傳遞。 - 自增 ID 配置(步長 2 + 偏移 1/2)是避免主鍵沖突的關(guān)鍵,確保 A、B 生成的 ID 完全不重疊。
- 驗證時優(yōu)先檢查
Slave_IO_Running和Slave_SQL_Running,再通過實際數(shù)據(jù)寫入測試同步功能。
總結(jié)
到此這篇關(guān)于MySQL互為主從(雙向同步)部署的文章就介紹到這了,更多相關(guān)MySQL互為主從部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL從5.7升級到8.0的完整操作流程(小白也能看懂)
MySQL 8.0 相比 5.7 引入了很多新特性和改進,但直接升級存在一定風(fēng)險,所以本篇博客詳細介紹如何安全地升級數(shù)據(jù)庫,讓你在寶塔環(huán)境下順利完成操作,需要的朋友可以參考下2025-10-10
Mysql添加用戶和設(shè)置權(quán)限的操作方法
這篇文章主要介紹了Mysql添加用戶和設(shè)置權(quán)限的操作方法,主要包括管理用戶,權(quán)限控制的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
MySQL中安裝樣本數(shù)據(jù)庫Sakila過程分享
這篇文章主要介紹了MySQL中安裝樣本數(shù)據(jù)庫Sakila過程分享,Sakila數(shù)據(jù)庫主要用來做一些基本的操作以及壓力測試等,需要的朋友可以參考下2014-10-10
MySQL-MMM安裝指南(Multi-Master Replication Manager for MySQL)
這篇文章主要介紹了mysql Multi-Master Replication Manager for MySQL的安裝方法,需要的朋友可以參考下2014-02-02
MySQL復(fù)制出錯 Last_SQL_Errno:1146的解決方法
這篇文章主要介紹了MySQL復(fù)制出錯 Last_SQL_Errno:1146的解決方法,需要的朋友可以參考下2016-07-07
從入門到精通解析MySQL中DDL操作的核心知識與應(yīng)用技巧
本文全面介紹了MySQL數(shù)據(jù)定義語言(DDL)的核心知識與應(yīng)用技巧,主要內(nèi)容包括DDL的核心概念,常見語句,高級特性與優(yōu)化策略,希望對大家有所幫助2026-06-06
使用MySQL的yum源安裝MySQL5.7數(shù)據(jù)庫的方法
這篇文章主要介紹了使用MySQL的yum源安裝MySQL5.7數(shù)據(jù)庫的方法的相關(guān)資料,需要的朋友可以參考下2016-08-08

