1. 程式人生 > >【MySQL】主從複製搭建

【MySQL】主從複製搭建

前言

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方式:

  1. salve伺服器my.cnf 增加 skip-slave-start
  2. 重啟salve mysql

問題 & 方案

主從同步延遲問題

  1. 當master庫tps比較高的時候,產生的DDL數量超過slave一個sql執行緒所能承受的範圍,或者slave的大型query語句產生鎖等待
  2. 網路傳輸: bin檔案的傳輸延遲
  3. 磁碟的讀寫耗時:檔案通知更新、磁碟讀取延遲、磁碟寫入延遲

解決方案

  1. 在資料庫和應用層增加快取處理,優先從快取中讀取資料
  2. 減少slave同步延遲,可以修改slave庫sync_binlog屬性; sync_binlog=0 檔案系統來排程把binlog_cache重新整理到磁碟,sync_binlog=n
  3. 增加延時監控:Nagios做網路監控、mk-heartbeat