?一、核心優點?
?數據一致性提升?
主庫提交事務前至少等待一個從庫接收Binlog并寫入Relay Log,減少主庫宕機導致的數據丟失風險。
?AFTER SYNC模式?(默認):主庫先同步Binlog到從庫再提交事務,一致性更強。
?性能平衡?
相比全同步復制,僅需等待一個從庫ACK,降低延遲,適合高并發場景。
?自動降級與高可用?
超時或從庫異常時自動切換為異步復制,避免主庫阻塞,提升系統可用性。
?二、主要問題?
?性能影響?
主庫需等待從庫ACK,網絡延遲或從庫負載高時,事務提交速度下降。
?超時降級風險?
若所有從庫長時間未響應,主庫會降級為異步復制,可能導致數據不一致。
?配置復雜度?
需安裝插件并調整參數(如超時時間、等待從庫數量),生產環境需謹慎測試。
?三、具體配置步驟(以主從架構為例)??
?1. 前提條件?
主從復制已配置完成,server-id唯一,Binlog開啟。
MySQL版本≥5.7,支持動態加載插件。
?2. 安裝插件?
?主庫?:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled = 1;
?從庫?:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
可通過SHOW PLUGINS;驗證插件是否加載成功。
?3. 關鍵參數配置(my.cnf/my.ini)??
?主庫?ini:semisync_master.dll
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 5000 # 超時時間(毫秒,默認10000)
rpl_semi_sync_master_wait_for_slave_count = 1 # 等待從庫數量,默認1
rpl_semi_sync_master_wait_point = AFTER_SYNC # 推薦模式:先同步再提交
?從庫?ini:
[mysqld]
rpl_semi_sync_slave_enabled = 1
重啟MySQL使配置生效。
?4. 驗證狀態?
?主庫?:
SHOW STATUS LIKE ‘Rpl_semi_sync_master_status’; # 應顯示’ON’
SHOW STATUS LIKE ‘Rpl_semi_sync_master_clients’; # 顯示已連接的從庫數量
?從庫?:
SHOW STATUS LIKE ‘Rpl_semi_sync_slave_status’; # 應顯示’ON’
?四、注意事項?
?參數調優?:
高延遲網絡可增大rpl_semi_sync_master_timeout,避免頻繁降級。
多從庫場景下,rpl_semi_sync_master_wait_for_slave_count可設置為2,進一步提升數據安全性。
?監控與告警?:
通過SHOW GLOBAL STATUS監控Rpl_semi_sync_master_no_tx(未確認事務數),及時發現異常。
?與組復制的區別?:
半同步復制僅保證至少一個從庫同步,而組復制(Group Replication)需所有節點確認,適用于強一致性場景
五、my-master配置文件
[mysqld]
port=3311
basedir=D:/mysql_wite_read/3311
datadir=D:/mysql_wite_read/3311/data
server-id=3311
log-bin=mysql-bin-3311
slave_net_timeout = 65
#時區配置
default-time-zone =SYSTEM
lc-messages-dir = D:/mysql_wite_read/mysql-5.7.44-winx64/share
#secure_file_priv = D:/mysql_wite_read/3311/upload
explicit_defaults_for_timestamp = ON
#慢日志配置
slow_query_log = 1
slow_query_log_file =D:/mysql_wite_read/3311/data/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_output = FILE
log_timestamps=SYSTEM
#錯誤日志配置
log_error = D:/mysql_wite_read/3311/data/error.log
log_error_verbosity = 3
#插件配置
plugin_dir = D:/mysql_wite_read/mysql-5.7.44-winx64/lib/plugin
#半同步配置
plugin-load = “rpl_semi_sync_master=semisync_master.dll”
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 5000 # 超時時間,單位毫秒,可根據網絡情況調整
rpl_semi_sync_master_wait_for_slave_count = 1 # 等待從庫數量,默認 1
rpl_semi_sync_master_wait_point = AFTER_SYNC # 推薦模式
六、my-slave配置文件
[mysqld]
port=3312
basedir=D:/mysql_wite_read/3312
datadir=D:/mysql_wite_read/3312/data
server-id=3312
log-bin=mysql-bin-3312
#時區配置
default-time-zone =SYSTEM
lc-messages-dir = D:/mysql_wite_read/mysql-5.7.44-winx64/share
#secure_file_priv = D:/mysql_wite_read/3311/upload
explicit_defaults_for_timestamp = ON
#慢日志配置
slow_query_log = 1
slow_query_log_file =D:/mysql_wite_read/3312/data/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_output = FILE
log_timestamps=SYSTEM
#錯誤日志配置
log_error = D:/mysql_wite_read/3312/data/error.log
log_error_verbosity = 3
#插件配置
plugin_dir = D:/mysql_wite_read/mysql-5.7.44-winx64/lib/plugin
#半同步配置
plugin-load = “rpl_semi_sync_slave=semisync_slave.dll”
rpl_semi_sync_slave_enabled = 1
七、my-master驗證
C:\Users\Administrator>D:\mysql_wite_read\mysql-5.7.44-winx64\bin\mysql.exe -u root -p -h 127.0.0.1 -P 3311
Enter password: ****************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44-log MySQL Community Server (GPL)
Copyright ? 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_master_status’
-> ;
±----------------------------±------+
| Variable_name | Value |
±----------------------------±------+
| Rpl_semi_sync_master_status | ON |
±----------------------------±------+
1 row in set (0.00 sec)
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_master_clients’;
±-----------------------------±------+
| Variable_name | Value |
±-----------------------------±------+
| Rpl_semi_sync_master_clients | 1 |
±-----------------------------±------+
1 row in set (0.00 sec)
mysql>
八、my-slave驗證
C:\Users\Administrator>D:\mysql_wite_read\mysql-5.7.44-winx64\bin\mysql.exe -u root -p -h 127.0.0.1 -P 3312
Enter password: ****************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44-log MySQL Community Server (GPL)
Copyright ? 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_slave_status’;
±---------------------------±------+
| Variable_name | Value |
±---------------------------±------+
| Rpl_semi_sync_slave_status | ON |
±---------------------------±------+
1 row in set (0.00 sec)
mysql>




