主從複製是 MySQL 高可用架構的基石,透過將主庫的二進制日志同步到從庫實現數據冗災與讀寫分離。本文以雙節點環境為例,詳細記錄配置步驟與關鍵參數說明。
| 角色 | IP | OS | MySQL 版本 |
|---|---|---|---|
| Master | 192.0.0.1 | Linux | 4.1.12 |
| Slave | 192.0.0.2 | Linux | 4.1.18 |
版本原則: 主從版本最好一致;若不一致,從庫版本必須高於主庫,確保兼容性。
[mysqld] log-bin=mysql-bin server-id=1 binlog-do-db=extmail binlog-ignore-db=mysql,test
log-bin:啟用二進制日志(必須)。server-id:唯一正整數,範圍 1 ~ 2³²-1。binlog-do-db:需同步的資料庫。binlog-ignore-db:排除同步的資料庫,多個用逗號分隔。GRANT REPLICATION SLAVE ON *.* TO 'abc'@'192.0.0.2' IDENTIFIED BY '123';
僅授予 REPLICATION SLAVE 權限,限制來源 IP,遵循最小權限原則。
service mysql restart
mysqldump --master-data extmail > extmail_backup_20071120.sql
--master-data 會在備份文件中自動記錄當前 binlog 文件名與位置,從庫導入後可直接定位同步起點。
SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 79 | extmail | mysql,test | +------------------+----------+--------------+------------------+
記錄 File 與 Position,後續從庫配置需用到。
[mysqld] server-id=2 master-host=192.0.0.1 master-port=3306 master-user=abc master-password=123 master-connect-retry=60
server-id:不可與 Master 及其他 Slave 重複。master-connect-retry:連線失敗重試間隔(秒)。mysqladmin create extmail mysql extmail < extmail_backup_20071120.sql
SLAVE STOP; CHANGE MASTER TO MASTER_HOST='192.0.0.1', MASTER_USER='abc', MASTER_PASSWORD='123', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=79; SLAVE START;
MASTER_LOG_FILE 與 MASTER_LOG_POS 需與 Master 端 SHOW MASTER STATUS 結果一致。
SHOW PROCESSLIST;
觀察 system user 執行緒狀態為 Waiting for master to send event 即代表同步正常運行。
server-id 衝突