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

MySQL 主從復制搭建實戰:解決非實時同步關鍵參數 sync_binlog

     編輯:MySQL 綜合教學

MySQL 主從復制搭建實戰:解決非實時同步關鍵參數 sync_binlog

記錄一次基於 GTID/傳統位點的主從搭建全過程,重點排查從庫延遲需 FLUSH LOGS 才同步的根因——sync_binlog=100 導致 Binlog 刷盤延遲。

架構與版本

  • Master: 192.168.1.6, MySQL 5.5.40
  • Slave: 192.168.1.8, MySQL 5.5.40

核心步驟

  1. 主庫全量備份:
    mysqldump --all-databases --master-data=2 --single-transaction ... > backup.sql
    記錄 CHANGE MASTER TO MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=529372。
  2. 從庫導入:關閉 slow_query_log 避免報錯,導入備份。
  3. 主庫創建復制用戶:
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';
  4. 從庫配置同步:
    CHANGE MASTER TO MASTER_HOST='192.168.1.6', MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=529372;
    START SLAVE;
  5. 驗證:SHOW SLAVE STATUS\G 確認 Slave_IO_Running: Yes, Slave_SQL_Running: Yes, Seconds_Behind_Master: 0。

故障現象與根因

主庫 INSERT 後,從庫 SELECT 不見新數據;執行 FLUSH LOGS 後同步出現。
排查參數:

SHOW VARIABLES LIKE 'sync_binlog';  -- 100
SHOW VARIABLES LIKE 'innodb_flush_method';  -- O_DIRECT
SHOW VARIABLES LIKE 'autocommit';  -- ON

根因:sync_binlog=100 表示每 100 次事務提交才 fsync Binlog 到磁盤。主庫崩潰或未刷盤時,從庫 IO 線程讀不到最新事件,導致可見延遲。

修復

SET GLOBAL sync_binlog = 1;  -- 即時生效
-- 永久生效寫入 my.cnf
[mysqld]
sync_binlog = 1

修改後主庫每次提交強制刷盤,從庫實時可見,零延遲(網絡延遟除外)。

常用運維命令

RESET MASTER;
SHOW MASTER STATUS\G;
SHOW BINLOG EVENTS IN 'binlog.000001';
FLUSH LOGS;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved