MySQL 複製架構之雙主模型

MySQL 複製架構之雙主模型

雙主模型特性

  • 兩個節點互爲主從:,每個節點各自都要開啓binlog(二進制日誌)和relay log(中繼日誌)
  • 雙主模型極易導致兩個數據庫的數據不一致
  • 雙主模型中,假如某作爲主鍵或唯一鍵的字段的值類型設置了INCREMENT(自增長),可能導致兩個數據庫同步時出現主鍵或唯一鍵衝突的情況,爲避免此情況,要對每個節點重新定義自增長值的起始偏移量和增長步距

雙主模型的實現步驟

  1. 修改第一個節點的配置
vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
#設置serverid,啓用二進制日誌和中繼日誌
server_id=1
log_bin=master-log
relay_log=relay-log
#設置自增長id的值爲奇數
auto_increment_offset=1
auto_increment_increment=2
  1. 修改第二個節點的配置
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=2
log_bin=master-log
relay_log=relay-log
#設置自增長id的值爲偶數
auto_increment_offset=2
auto_increment_increment=2
  1. 兩個節點上分別創建具有複製權限的賬號

    • 在第一個節點(172.16.50.9)上執行
GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.50.10' IDENTIFIED BY 'replpass';
FLUSH PRIVILEGES;
  • 在第二個節點(172.16.50.10)上執行
GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.50.9' IDENTIFIED BY 'replpass';
FLUSH PRIVILEGES;
  1. 在兩個節點上分別查看二進制日誌情況

    • 在第一個節點
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      507 |              |                  |
+-------------------+----------+--------------+------------------+
  • 在第二個節點
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      507 |              |                  |
+-------------------+----------+--------------+------------------+
  1. 設置對方作爲自己的主節點的信息

    • 在第一個節點
CHANGE MASTER TO MASTER_HOST='172.16.50.9',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_PORT=3306,MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=507;
  • 在第二個節點
CHANGE MASTER TO MASTER_HOST='172.16.50.10',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_PORT=3306,MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=507;
  1. 分別啓動IO線程和SQL線程並查看信息

    • 在第一個節點
START SLAVE;
SHOW SLAVE STATUS\G;
  • 在第二個節點
START SLAVE;
SHOW SLAVE STATUS\G;
  1. 在兩個節點分別修改數據,驗證雙主模型的效果

複製時應該注意的問題:

1、從服務設定爲“只讀”;
        在從服務器啓動read_only,但僅對非SUPER權限的用戶有效;

        阻止所有用戶:
            mysql> FLUSH TABLES WITH READ LOCK;

2、儘量確保複製時的事務安全
        在master節點啓用參數:
            sync_binlog = ON 

        如果用到的是InnoDB存儲引擎:
            innodb_flush_logs_at_trx_commit=ON
            innodb_support_xa=ON

3、從服務器意外中止時儘量避免自動啓動複製線程


4、從節點:設置參數
        sync_master_info=ON

        sync_relay_log_info=ON
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章