mysql主從復制的搭建步驟包括:一、主庫開啟二進制日志并創建復制賬號;二、獲取主庫數據并導出;三、配置從庫并啟動復制;四、常用參數包括server-id、log-bin、relay-log等;五、常見問題如延遲、連接失敗需逐一排查。具體操作為:1. 在主庫配置文件中設置server-id=1和log-bin=mysql-bin;2. 創建repl用戶并授權;3. 鎖表后執行mysqldump導出數據并解鎖;4. 從庫配置server-id=2,導入數據后通過change master命令連接主庫并啟動復制;5. 常用參數包括設置read-only、replicate-do-db、slave-skip-errors等;6. 常見問題包括延遲過高可啟用多線程復制、連接失敗檢查網絡與權限、數據不一致使用pt-table-checksum校驗工具檢測,主庫宕機需手動切換并考慮數據丟失風險。
MySQL主從復制是數據庫高可用和讀寫分離的基礎,設置起來不算復雜,但關鍵是要理解原理并正確配置。下面直接說怎么操作。
一、主從復制的基本步驟
要搭建主從復制,核心是讓從庫(Slave)連接到主庫(Master),然后同步數據。主要流程包括以下幾個步驟:
-
開啟主庫的二進制日志
在主庫的配置文件(如my.cnf或my.ini)中添加:server-id=1 log-bin=mysql-bin
server-id必須唯一,主從不能一樣;log-bin用于記錄所有更改操作的日志。
-
創建用于復制的賬號
在主庫執行:CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
這個賬號只能用來做復制,權限有限更安全。
-
獲取主庫當前狀態并導出數據
執行以下命令鎖表并查看當前binlog位置:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
然后使用mysqldump導出數據,并解鎖:
mysqldump -u root -p --all-databases --master-data > backup.sql mysql -u root -p < backup.sql UNLOCK TABLES;
-
配置從庫并啟動復制
從庫的配置也要有唯一的server-id:server-id=2
導入主庫的數據后,在從庫執行:
CHANGE MASTER TO MASTER_HOST='主庫IP', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 4; START SLAVE;
其中MASTER_LOG_FILE和MASTER_LOG_POS來自之前查到的SHOW MASTER STATUS結果。
二、常用的主從復制參數說明
MySQL提供了一些重要的參數來控制復制行為,這些參數對性能和一致性影響較大。
- server-id:每個實例必須唯一,用于標識服務器身份。
- log-bin:啟用二進制日志,主庫必須開啟才能進行復制。
- relay-log:從庫的中繼日志,默認自動命名,可以手動指定路徑優化IO。
- read-only:建議在從庫上設置為只讀,防止誤操作。
- replicate-do-db / replicate-ignore-db:控制哪些數據庫需要或不需要復制。
- slave-skip-errors:跳過某些錯誤,比如常見的1062(主鍵沖突)、1053(中斷)等。
這些參數可以根據業務需求靈活調整,但要注意不要隨意忽略錯誤,否則可能導致數據不一致。
三、常見問題與注意事項
主從復制過程中可能會遇到一些問題,比如延遲、斷連、數據不一致等。
- 延遲過高:可能是網絡慢、從庫負載高或者SQL執行慢。可以通過多線程復制(MySQL 5.7+支持)緩解。
- 連接失敗:檢查防火墻、端口是否開放,賬號密碼是否正確,主庫是否允許遠程訪問。
- 數據不一致:可以通過定期校驗工具如pt-table-checksum檢測。
- 主庫宕機處理:如果主庫掛了,可能需要手動切換從庫為主庫,這時候要考慮是否有數據丟失風險。
此外,復制默認是異步的,如果你對一致性要求高,可以考慮半同步復制(semi-sync replication)。
基本上就這些。主從復制雖然步驟明確,但細節容易出錯,特別是初始數據的一致性和網絡配置部分。只要一步步來,注意參數配置和驗證,一般都能順利跑起來。