MySQL 複製架構之雙主模型
雙主模型特性
- 兩個節點互爲主從:,每個節點各自都要開啓binlog(二進制日誌)和relay log(中繼日誌)
- 雙主模型極易導致兩個數據庫的數據不一致
- 雙主模型中,假如某作爲主鍵或唯一鍵的字段的值類型設置了INCREMENT(自增長),可能導致兩個數據庫同步時出現主鍵或唯一鍵衝突的情況,爲避免此情況,要對每個節點重新定義自增長值的起始偏移量和增長步距
雙主模型的實現步驟
- 修改第一個節點的配置
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
- 修改第二個節點的配置
[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
兩個節點上分別創建具有複製權限的賬號
- 在第一個節點(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;
在兩個節點上分別查看二進制日誌情況
- 在第一個節點
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 | | |
+-------------------+----------+--------------+------------------+
設置對方作爲自己的主節點的信息
- 在第一個節點
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;
分別啓動IO線程和SQL線程並查看信息
- 在第一個節點
START SLAVE;
SHOW SLAVE STATUS\G;
- 在第二個節點
START SLAVE;
SHOW SLAVE STATUS\G;
- 在兩個節點分別修改數據,驗證雙主模型的效果
複製時應該注意的問題:
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