雙主熱備架構下,兩台 MySQL 互為主從,實現讀寫分離與高可用。本文記錄生產環境配置全過程,含權限授予、配置檔差異化、啟動驗證與常見錯誤處理。
在兩台伺服器分別執行:
-- 庫1 (192.168.21.39) 授權給庫2
GRANT REPLICATION SLAVE ON *.* TO 'repdcs'@'192.168.21.106' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'repdcs'@'192.168.21.106' IDENTIFIED BY '123456';
-- 庫2 (192.168.21.106) 授權給庫1
GRANT REPLICATION SLAVE ON *.* TO 'repdcs'@'192.168.21.39' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'repdcs'@'192.168.21.39' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=2
log-bin=mysqlbin
binlog_format=ROW
innodb_flush_log_at_trx_commit=1
sync_binlog=1
master-host=192.168.21.39
master-user=repdcs
master-pass=123456
master-connect-retry=60
replicate-do-db=dcs
slave-net-timeout=60
[mysqld]
datadir=/home/data/mysql
socket=/home/data/mysql/mysql.sock
server-id=1
log-bin=mysqlbin
binlog_format=ROW
innodb_flush_log_at_trx_commit=1
sync_binlog=1
master-host=192.168.21.106
master-user=repdcs
master-pass=123456
master-connect-retry=60
replicate-do-db=dcs
slave-net-timeout=60
關鍵差異:server-id唯一、master-host指向對方 IP、datadir/socket依實際路徑設定。建議啟用binlog_format=ROW避免非確定性 SQL 複寫問題。
service mysqld restart
-- 檢查從庫狀態
SHOW SLAVE STATUS\G
-- 關鍵指標應為 Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_Error: Error 'Can't create database 'dcs'; database exists'原因:從庫已存在同名資料庫,複寫建庫語句衝突。
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE SQL_THREAD;
FLUSH PRIVILEGES;
| 參數 | 說明 | 建議值 |
|---|---|---|
| server-id | 伺服器唯一 ID | 1, 2... 不重複 |
| log-bin | 啟用二進位日誌 | mysqlbin |
| binlog_format | 日誌格式 | ROW(推薦) |
| innodb_flush_log_at_trx_commit | 事務提交刷盤策略 | 1(最安全) |
| sync_binlog | Binlog 同步頻率 | 1(每次提交同步) |
| master-connect-retry | 重連間隔(秒) | 60 |
| replicate-do-db | 僅複寫指定資料庫 | dcs |
| slave-net-timeout | 從庫判定主庫斷線超時 | 60 |
auto_increment_offset + auto_increment_increment 避免主鍵衝突(若必須雙寫)pt-table-checksum 校驗主從一致性Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running 三大指標