基於 MySQL 4.1 實測,採用基於二進制日志的異步複製架構。主庫 192.168.0.205,從庫 192.168.0.206。本文提供 7 步標準化流程、驗證方法與日常運維命令。
server-id 唯一/etc/my.cnf[mysqld]
server-id=1
log-bin=mysql-bin
# 可選:只複製特定庫
# binlog-do-db=business_db
# binlog-ignore-db=test,tmp
重啟主庫 service mysql restart。
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.*
TO 'repl_user'@'192.168.0.206' IDENTIFIED BY 'repl_password';
FLUSH PRIVILEGES;
最小權限原則:僅授予 REPLICATION SLAVE、RELOAD(FLUSH TABLES)、SUPER(CHANGE MASTER/殺線程)。
/opt/mysql/bin/mysql -u repl_user -p -h 192.168.0.205
# 能登錄說明網絡/權限無問題
/etc/my.cnf[mysqld]
server-id=2
master-host=192.168.0.205
master-user=repl_user
master-password=repl_password
master-port=3306
master-connect-retry=60
# 可選:只複製特定庫
# replicate-do-db=business_db
# replicate-ignore-db=test,tmp
重啟從庫 service mysql restart。
/opt/mysql/share/mysql/mysql.server start
/opt/mysql/bin/mysql -u root -p
mysql> LOAD DATA FROM MASTER;
--single-transaction):
# 主庫
mysqldump --single-transaction --master-data=2 --all-databases > /tmp/full.sql
scp /tmp/full.sql 192.168.0.206:/tmp/
# 從庫
mysql -u root -p < /tmp/full.sql
# 主庫
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 記錄 File + Position
tar czf /tmp/mysql_data.tar.gz /var/lib/mysql/
UNLOCK TABLES;
# 從庫解壓覆蓋 datadir,修改 server-id,啟動
# 從庫
mysql> SLAVE START;
mysql> SHOW SLAVE STATUS\G;
關鍵指標:
Slave_IO_Running: Yes — I/O 線程連接主庫正常Slave_SQL_Running: Yes — SQL 線程重放日志正常Seconds_Behind_Master: 0 — 無延遲# 主庫
CREATE DATABASE sampdb;
USE sampdb;
CREATE TABLE test_tbl (name CHAR(20), phone CHAR(20));
INSERT INTO test_tbl VALUES ('abc', '0532555555');
# 從庫
SHOW DATABASES; -- 應見 sampdb
USE sampdb;
SHOW TABLES; -- 應見 test_tbl
SELECT * FROM test_tbl; -- 數據一致
| 操作 | 命令 | 說明 |
|---|---|---|
| 暫停/恢復複製 | SLAVE STOP; / SLAVE START; | 線程級控制,不影響主庫 |
| 查看複製狀態 | SHOW SLAVE STATUS\G; | 重點關注 Master_Log_File、Read_Master_Log_Pos、Exec_Master_Log_Pos |
| 清理主庫舊 Binlog | PURGE MASTER LOGS TO 'mysql-bin.000004'; | 極度謹慎:確認從庫已執行至該位置,否則導致從庫斷檔 |
| 動態修改主庫參數 | CHANGE MASTER TO MASTER_HOST='...', MASTER_LOG_FILE='...', MASTER_LOG_POS=...; | 需先 SLAVE STOP,修改後 SLAVE START |
| 跳過報錯事務 | SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; SLAVE START; | 慎用,可能導致數據不一致 |
server-id 主從必須不同,集群中全局唯一log-bin 未開啟無法複製master.info 文件記錄連接信息,手動修改 my.cnf 後需 CHANGE MASTER TO 同步master-connect-retry 控制重試間隔