Mysql主從複製

mysql主從複製
#從節點執行
    change master to 
  master_host='1.0.0.3',(這裏最好使用ip,其實寫主機的也是能夠的,可是一個局域網內主機名不少相同的話,會找不到)
  master_port=3306,
  master_user='zyh',
  master_password='123456',
  master_log_file='mysql-bin-11.000002',
  master_log_pos=1326;

# 查看狀態
show master status\G

流程:
一、主節點必須啓用二進制日誌,記錄任何修改了數據庫數據的事件。
二、從節點開啓一個線程(I/O Thread)把本身扮演成 mysql 的客戶端,經過 mysql 協議,請求主節點的二進制日誌文件中的事件 。
三、主節點啓動一個線程(dump Thread),檢查本身二進制日誌中的事件,跟對方請求的位置對比,若是不帶請求位置參數,則主節點就會從第一個日誌文件中的第一個事件一個一個發送給從節點。
四、從節點接收到主節點發送過來的數據把它放置到中繼日誌(Relay log)文件中。並記錄該次請求到主節點的具體哪個二進制日誌文件內部的哪個位置(主節點中的二進制文件會有多個)。
五、從節點啓動另一個線程(sql Thread ),把 Relay log 中的事件讀取出來,並在本地再執行一次。

mysql默認的複製方式是異步的,而且複製的時候是有並行複製能力的。同步可能遇到網絡不穩定的問題,因此複製方式有:mysql

  • 異步複製:主庫生成一個 binlog dump 線程向從庫 I/O 線程傳送 binlog。從庫上的 I/O 線程將 binlog 複製到本身的 relay log 中。最終由從庫中的 SQL 線程讀取 relay log 中的事件重放到從庫上。sql

  • semi-sync半同步複製:master的dump線程除了發送binlog數據到slave,還承擔了接收slave的ack工做。若是出現異常,沒有收到ack,那麼將自動降爲普通的異步複製,直到異常修復數據庫

  • 級聯複製模型:myql主服務器有多個從服務器(2個+),當主服務器由於向多個從服務器,發送更新的二進制日誌(過程是串行的),而形成主服務器的壓力大時,推薦使用級聯複製服務器

產生時延的緣由:網絡

  • slave的Slave_SQL_Running是單線程的,跟不上master(甚至是多主一從模型)。能夠開並行複製(5.6支持)
  • 產生了鎖等待
  • 硬件負載:cpu、io、網絡負載大

解決對應問題,甚至還能夠直接禁用slave端的binlog異步

相關文章
相關標籤/搜索