MySQL 支援主從複製、主主互備。雙主模式下,兩台資料庫互為主從,實現雙向即時同步,兼具資料備份與讀寫負載分攤功能。本文以兩台伺服器為例:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tongbu'@'192.168.0.2' IDENTIFIED BY '123456';
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
log-bin=mysql-bin
server-id=1
master-host=192.168.0.2
master-user=tongbu
master-password=123456
master-port=3306
master-connect-retry=30
binlog-do-db=mysql
replicate-do-db=mysql
skip-name-resolve
back_log = 500
max_connect_errors = 100
max_connections=1000
service mysqld restart
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tongbu'@'192.168.0.1' IDENTIFIED BY '123456';
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
server-id=2
master-host=192.168.0.1
master-user=tongbu
master-password=123456
master-port=3306
binlog-do-db=mysql
replicate-do-db=mysql
skip-name-resolve
back_log = 500
max_connections = 1000
max_connect_errors = 100
slave_skip_errors=1062
sync_binlog=1
log-bin=mysql-bin
關鍵差異:Server B 額外設定 slave_skip_errors=1062(忽略主鍵衝突)與 sync_binlog=1(每次操作同步刷盤),因定位為備庫角色。
service mysqld restart
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000019 | 11809679 | mysql | |
+------------------+----------+--------------+------------------+
記錄 File 與 Position 值。
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=11809679;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
兩者皆為 Yes 即代表雙主同步已正常運行。
Seconds_Behind_Master 確保同步延遲在可接受範圍auto_increment_offset 與 auto_increment_increment 配置防止自增 ID 衝突