【MySQL】主從複製搭建
阿新 • • 發佈:2018-12-16
前言
MySQL能夠將一個 MySQL Server的 Instance 中的資料完整的複製到另外一個 MySQL Server 的 Instance 中,雖然複製過程並不是實時而是非同步進行的,但是延時非常之少
搭建步驟
1. 修改主伺服器配置
- 新增使用者:
mysql > Create user repl identified by ‘repl';
- 授權使用者:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl' ;
- 修改my.cnf配置檔案:
vim my.cnf
- 在 [mysqld] 下新增如下配置
#啟用二進位制日誌檔案
log-bin=mysql-bin
#伺服器唯一ID,建議使用IP最後數字
server-id=130
2. 記錄主伺服器資訊
# 重啟mysql服務
systemctl restart mysqld
# 檢視master狀態
mysql > show master status;
3. 修改從伺服器配置
- 修改my.cnf配置檔案:
vim my.cnf
- 在 [mysqld] 下新增如下配置
#伺服器唯一ID,建議使用IP最後數字
server-id=132
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
read_only= 1
4. 連線主從伺服器
# 重啟mysql服務
systemctl restart mysqld
mysql > change master to master_host='192.168.60.131',master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=154;
mysql > start slave;
mysql > show slave status\G;
當如下兩個執行緒狀態為yes,表示主從複製配置成功
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
mysql 關閉slave方式:
- salve伺服器my.cnf 增加
skip-slave-start
- 重啟salve mysql
問題 & 方案
主從同步延遲問題:
- 當master庫tps比較高的時候,產生的DDL數量超過slave一個sql執行緒所能承受的範圍,或者slave的大型query語句產生鎖等待
- 網路傳輸: bin檔案的傳輸延遲
- 磁碟的讀寫耗時:檔案通知更新、磁碟讀取延遲、磁碟寫入延遲
解決方案:
- 在資料庫和應用層增加快取處理,優先從快取中讀取資料
- 減少slave同步延遲,可以修改slave庫sync_binlog屬性; sync_binlog=0 檔案系統來排程把binlog_cache重新整理到磁碟,sync_binlog=n
- 增加延時監控:Nagios做網路監控、mk-heartbeat