MySQL 主從同步是實現資料庫高可用、讀寫分離與災備的核心技術。本文將以 MySQL 5.0 以上版本為例,詳細記錄從主庫建立同步帳號、修改配置檔、啟動服務到驗證同步狀態的完整操作流程,助你快速落地生產環境級的主從架構。
首先透過 Socket 連線進入 MySQL:
mysql -S /tmp/MySQL-3108.sock
建立用於同步驗證的資料庫 sinatest:
CREATE DATABASE sinatest;
為安全起見,建議僅授予必要權限。此處示範授予所有權限(生產環境請按最小權限原則調整):
GRANT ALL ON *.* TO 'ali'@'%' IDENTIFIED BY 'abc111';
my.cnf編輯主庫配置檔(路徑視實際安裝而定,本例為 /data2/ali/MySQL3308/my.cnf),在 [mysqld] 區段新增:
binlog-do-db=sinatest
說明:此參數指定僅記錄 sinatest 資料庫的二進位日誌,減少不必要的日誌開銷。
編輯從庫配置檔(本例為 /data2/ali/MySQL3309/my.cnf),在 [mysqld] 區段新增以下參數:
master-host=127.0.0.1
master-user=ali
master-password=abc111
master-port=3308
server-id=2
master-connect-retry=60
replicate-do-db=sinatest
log-slave-updates
| 參數 | 用途 |
|---|---|
server-id | 唯一識別從庫,不可與主庫(通常為 1)重複 |
replicate-do-db | 僅同步指定資料庫 |
log-slave-updates | 將從庫接收到的變更寫入自身二進位日誌,支援級聯同步 |
master-connect-retry | 連線失敗後重試間隔(秒) |
依序停止並啟動主從兩個實例:
# 停止現有進程後啟動主庫
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data2/ali/MySQL3308/my.cnf --user=root &
# 啟動從庫
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data2/ali/MySQL3309/my.cnf --user=root &
mysql -S /tmp/MySQL-3108.sock
USE sinatest;
CREATE TABLE IF NOT EXISTS ali_test_00 (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`my_id` VARCHAR(16) BINARY NOT NULL DEFAULT '',
`my_title` VARCHAR(96) BINARY NOT NULL DEFAULT '',
`status` INT(11) UNSIGNED NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `my_id` (`my_id`)
) ENGINE=MyISAM;
INSERT INTO ali_test_00 VALUES (NULL, 32, 'aliwwww', 1);
INSERT INTO ali_test_00 VALUES (NULL, 32, 'aliwwww', 1);
登入從庫執行 SHOW TABLES; 及 SELECT * FROM ali_test_00;,確認表與兩筆資料已出現。
| 指令 | 用途 |
|---|---|
SHOW SLAVE STATUS\G | 查看從庫同步狀態(重點關注 Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master) |
SHOW MASTER STATUS\G | 查看主庫目前 Binlog 檔名與位置 |
SLAVE STOP; / SLAVE START; | 停止/啟動同步執行緒 |
CHANGE MASTER TO ... | 動態調整主庫連線參數(如切換 Binlog 位點) |
範例:手動指定同步起始位點
CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_USER='ali',
MASTER_PASSWORD='abc111',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=0;
Seconds_Behind_Master 設定告警,延遲超過閾值立即介入。完成上述步驟後,你已擁有一套基於 Binlog 的 MySQL 主從同步架構。後續可進一步引入 ProxySQL、Orchestrator 或 MHA 實現自動故障轉移與讀寫分離,構建企業級高可用資料庫叢集。