最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL互為主從(雙向同步)部署超詳細教程

 更新時間:2025年11月01日 09:59:02   作者:老吳的愛徒  
MySQL互為主從是一種特殊的復制架構(gòu),其中兩個MySQL服務器互為主從,彼此之間互相同步數(shù)據(jù),這篇文章主要介紹了MySQL互為主從(雙向同步)部署的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

(CentOS 6/7 適用)

一、環(huán)境說明

服務器角色IP 地址系統(tǒng)版本MySQL 版本核心作用
服務器 A192.168.1.51CentOS 6/7MySQL 5.7.17作為 B 的主庫 + 作為 B 的從庫
服務器 B192.168.1.52CentOS 6/7MySQL 5.7.17作為 A 的主庫 + 作為 A 的從庫

目標:實現(xiàn) A、B 雙向數(shù)據(jù)同步,確保兩邊數(shù)據(jù)實時一致,支持讀寫分離或故障備份。

二、前置準備(兩臺服務器均執(zhí)行)

1. 確認 MySQL 狀態(tài)

先驗證 MySQL 版本一致性和服務運行狀態(tài),避免版本差異導致同步失敗。

# 1. 檢查MySQL版本(需均為5.7.17)
mysql -V

# 2. 確認MySQL服務正常運行
# 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

三、配置服務器 A(192.168.1.51)

1. 修改 MySQL 核心配置文件

編輯my.cnf,僅保留互為主從必需配置,減少冗余。

vim /etc/my.cnf

[mysqld]區(qū)塊添加以下內(nèi)容:

[mysqld]
server-id = 51                  # 唯一ID,不可與B重復(建議用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)建同步賬號(供服務器 B 連接)

登錄 MySQL,創(chuàng)建用于同步的賬號repluser,并授予復制權(quán)限。

# 登錄MySQL(輸入root密碼)
mysql -u root -p

執(zhí)行 SQL 命令:

-- 允許服務器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 |              |                  |
+------------------+----------+--------------+------------------+

四、配置服務器 B(192.168.1.52)

1. 修改 MySQL 核心配置文件

與服務器 A 類似,僅調(diào)整server-idauto_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 服務

# CentOS 7
systemctl restart mysqld
# CentOS 6
service mysqld restart

3. 創(chuàng)建同步賬號(供服務器 A 連接)

登錄 MySQL,創(chuàng)建給 A 用的同步賬號。

mysql -u root -p

執(zhí)行 SQL 命令:

-- 允許服務器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. 服務器 A 同步服務器 B 的數(shù)據(jù)(A 作為 B 的從庫)

登錄服務器 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. 服務器 B 同步服務器 A 的數(shù)據(jù)(B 作為 A 的從庫)

登錄服務器 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_RunningSlave_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 驗證同步

  1. 在 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應為1(奇數(shù))
  1. 在 B 上查看數(shù)據(jù)是否同步:
-- B上執(zhí)行
USE sync_test;
SELECT * FROM t1;  # 應返回ID=1的記錄

測試 2:B 寫入數(shù)據(jù),A 驗證同步

  1. 在 B 上插入數(shù)據(jù):
-- B上執(zhí)行
INSERT INTO sync_test.t1 (info) VALUES ('來自B的測試數(shù)據(jù)');  # ID應為2(偶數(shù))
  1. 在 A 上查看數(shù)據(jù)是否同步:
-- A上執(zhí)行
USE sync_test;
SELECT * FROM t1;  # 應返回ID=1和ID=2的兩條記錄

七、常見問題排查

  1. Slave_IO_Running: Connecting

    • 原因:IP 錯誤、同步賬號密碼錯誤、防火墻未關(guān)閉。
    • 解決:核對CHANGE MASTER TO中的 IP、賬號、密碼;確保防火墻已關(guān)閉。
  2. Slave_SQL_Running: No

    • 原因:主從數(shù)據(jù)不一致、主鍵沖突。
    • 解決:確保初始數(shù)據(jù)一致;檢查auto_increment配置是否正確(A 奇數(shù)、B 偶數(shù))。
  3. 同步延遲

    • 原因:數(shù)據(jù)量過大、服務器性能不足。
    • 解決:優(yōu)化 MySQL 配置(如增大innodb_buffer_pool_size);避免大事務。

八、總結(jié)

  1. 互為主從的核心是雙向配置主從關(guān)系,A 同步 B、B 同步 A,通過log_slave_updates = 1支撐雙向日志傳遞。
  2. 自增 ID 配置(步長 2 + 偏移 1/2)是避免主鍵沖突的關(guān)鍵,確保 A、B 生成的 ID 完全不重疊。
  3. 驗證時優(yōu)先檢查Slave_IO_RunningSlave_SQL_Running,再通過實際數(shù)據(jù)寫入測試同步功能。

總結(jié)

到此這篇關(guān)于MySQL互為主從(雙向同步)部署的文章就介紹到這了,更多相關(guān)MySQL互為主從部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

仙桃市| 夏河县| 东兰县| 额敏县| 淄博市| 九龙县| 綦江县| 黄陵县| 邯郸市| 天柱县| 绥化市| 肃南| 绥化市| 斗六市| 宝清县| 毕节市| 揭阳市| 榆林市| 顺义区| 忻城县| 闸北区| 舟山市| 新郑市| 兰考县| 南漳县| 顺昌县| 萍乡市| 崇左市| 社旗县| 荆州市| 余干县| 九江市| 光山县| 来凤县| 容城县| 古蔺县| 米林县| 阿城市| 当雄县| 偏关县| 玛纳斯县|