MySQL 主從複製實戰解析

前言:前面幾篇文章講解了在應用層讀寫分離的配置和使用,這篇文章未來個主從複製的實戰解析。html

 

說明:主從複製,讀寫分離結構圖mysql

 

原理圖sql

 

主庫生成一個線程: Binlog Dump線程
  一、此線程運行在主庫,當主從都配置好後,從庫運行START SLAVE啓動複製後,會在主庫上生成一個BinlogDump線程,該線程的主要做用就是讀取主庫Binlog事件,而後發送到從庫(從庫的I/O線程)。

從庫生成兩個線程:一個I/O線程,一個SQL線程; 一、i/o線程去請求主庫 的binlog,並將獲得的binlog日誌寫到relay log(中繼日誌) 文件中; 二、主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog; 三、SQL 線程,會讀取relay log文件中的日誌,並解析成具體操做,來實現主從的操做一致,而最終數據一致;

 

 

 

詳細流程以下: 一、主庫驗證從庫發起的鏈接; 二、主庫爲從庫開啓一個線程; 三、從庫將主庫日誌的偏移位告訴主庫; 四、主庫檢查該值是否小於當前二進制日誌偏移位。 五、若是小於,則通知從庫能夠取數據。 六、從庫持續從主庫取數據,直至取完,這時,從庫線程進入睡眠,主庫線程同時進入睡眠。 七、當主庫有更新時,主庫線程被激活,並將二進制日誌推送給從庫,並通知從庫線程進入工做狀態。 八、從庫SQL線程執行二進制日誌,隨後進入睡眠狀態。

 

存在問題: 一、主庫宕機後,數據可能丟失
    解決:先配置主主同步,再用keepalived實現雙機熱備自動切換,具體請百度雙機熱備
二、從庫只有一個sql Thread,主庫寫壓力大,複製極可能延時
    說明:當主庫的TPS併發較高時,產生的DDL數量超過slave一個sql線程所能承受的範圍,那麼延時就產生了,固然還有就是可能與slave的大型query語句產生了鎖等待。
    解決:
      一、用多臺slave來分攤請求
      二、關閉slave的一些日誌功能,如sync_binlog,innodb_flushlog,innodb_flush_log_at_trx_commit 
      三、更好的硬件

 

1、環境介紹數據庫

 

主:Linux(centos 7) MySQL(5.6.4) IP:192.168.8.228 從:Linux(centos 7) MySQL(5.6.4) IP:192.168.8.146

 

2、配置主庫環境centos

一、修改mysql配置文件 my.cnf,加入以下紅框內容

 

二、添加從庫權限帳號

  註釋:在主服務器上爲從服務器分配一個帳號,就像一把鑰匙,從服務器拿着這個鑰匙,才能到主服務器上來共享主服務器的日誌文件。
  
  提醒:記得 FLUSH PRIVILEGES 刷新權限

 

 

三、查看主服務器當前二進制日誌名和偏移量 解釋:這個操做的目的是爲了在從數據庫啓動後,從這個點開始進行數據的恢復

出現以上結果,說明主庫設置完畢了

 

3、配置從庫環境服務器

一、修改從庫mysql配置文件 my.cnf,加入以下紅框內容

 

二、配置鏈接主庫參數 說明:不支持在配置文件中加這些參數,mysql5.5+版本主從複製不支持這些變量,須要在從庫上用命令來設置

 

 

三、啓動slave進程
  
  從庫基本命令:
    啓動:slave start
    中止:slave stop

 

四、查看slave的狀態,若是下面兩項值爲YES,則表示配置正確: 1)、Slave_IO_Running: Yes 2)、Slave_SQL_Running: Yes

到此,從庫配置完成,只等主庫更新數據了
注意:上一步可能會遇到的問題(必定要記得先中止從庫改完後再啓動從庫)

  錯誤:當執行show slave status\G 時,發現slave_IO_Running:no時,而且下面的error_log還報錯了,相似這種
Slave can not handle replication events with時

  緣由:是你的master和slave的mysql版本不同,mysql5.6的binlog_checksum默認設置的是crc32。 而MySQL5.5 或者更早的版本默認值是None,因此能夠將兩個服務器的校驗都設爲none,或者crc32。

 

4、開始實驗併發

一、主庫表test1和從庫表test1裏面都沒有數據

 

二、在主庫中添加一條數據,再查看從庫表是否有這條數據

 

以上就是本篇文章的所有內容了,關於主從複製--讀寫分離就到這裏了。spa

參考連接:https://www.cnblogs.com/zhoujie/p/mysql1.html線程

相關文章
相關標籤/搜索