首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

MySQL 主從半同步複制配置完整指南

     編輯:DB2 教學

MySQL 主從半同步複制配置完整指南

MySQL 半同步複制介於非同步與全同步之間:主庫提交事務前,至少等待一個從庫確認收到 Relay Log 並寫入磁碟。本文記錄基於插件的半同步複制完整部署、驗證與監控流程。

環境準備

  • MySQL 5.6+(內建半同步插件)
  • 主庫:10.1.1.17:3306,從庫:10.1.1.18:3307
  • 已配置標準非同步複制基礎環境

主庫配置

-- 1. 安裝主庫半同步插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

-- 2. 驗證插件載入
SHOW PLUGINS LIKE 'rpl_semi_sync%';

-- 3. 啟用半同步並設定超時時間 (毫秒)
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 3000;  -- 3秒超時後退回非同步

-- 4. 持久化到配置檔
-- [mysqld]
-- rpl_semi_sync_master_enabled=1
-- rpl_semi_sync_master_timeout=3000

從庫配置

-- 1. 安裝從庫半同步插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

-- 2. 啟用從庫半同步
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

-- 3. 重啟 IO 線程以註冊半同步身份(關鍵步驟!)
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

驗證與監控

主庫狀態檢查

SHOW STATUS LIKE 'Rpl_semi_sync_master%';
-- 關鍵指標:
-- Rpl_semi_sync_master_status = ON          -- 半同步啟用
-- Rpl_semi_sync_master_clients = 1          -- 連接的半同步從庫數
-- Rpl_semi_sync_master_yes_tx = N           -- 成功半同步提交事務數
-- Rpl_semi_sync_master_no_tx = N            -- 退回非同步提交事務數
-- Rpl_semi_sync_master_tx_wait_time = N     -- 總等待從庫確認時間(微秒)

從庫狀態檢查

SHOW STATUS LIKE 'Rpl_semi_sync_slave%';
-- 關鍵指標:
-- Rpl_semi_sync_slave_status = ON           -- 從庫半同步狀態
-- Rpl_semi_sync_slave_received_heartbeats   -- 收到心跳包數量

功能測試

-- 主庫插入測試資料
INSERT INTO t1 VALUES('cc');

-- 觀察主庫狀態變化
SHOW STATUS LIKE 'Rpl_semi_sync_master%';
-- Rpl_semi_sync_master_yes_tx 應增加 1
-- Rpl_semi_sync_master_tx_wait_time 顯示等待延遲

關鍵參數調優建議

參數建議值說明
rpl_semi_sync_master_timeout1000-5000網路延遲較大環境建議調大,避免頻繁退回非同步
rpl_semi_sync_master_wait_pointAFTER_SYNC (5.7+)AFTER_COMMIT 效能較好,AFTER_SYNC 數據安全性更高
sync_binlog1配合半同步必須設為 1,確保 Binlog 刷盤
innodb_flush_log_at_trx_commit1確保 Redo Log 刷盤,配合半同步提供雙重保障

常見問題排查

  • 從庫顯示非半同步: 必須執行 STOP/START SLAVE IO_THREAD 重新註冊。
  • 主庫頻繁退回非同步: 檢查網路延遲、從庫磁碟 I/O、Relay Log 處理速度。
  • 插件載入失敗: 確認 plugin_dir 路徑正確,且 .so 檔案存在且版本匹配。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved