MySQL集群(一)之主從復制


前面學完了JDBC,接下來帶大家感受一下MySQL集群!其實什么是MySQL集群?簡單的說就是一群機器(服務器)的集合,它們連在一起來工作。

其實各種數據庫都有自己的集群,常常的多:

  

  我們要學習的就是MySQL Replication

一、配置mysql主從模式的原因

1)Mysql內建的復制功能構建大型、高性能應用程序的基礎。在實際企業應用環境當中,單台mysql數據庫是不足以滿足日后業務需求的。

  譬如當服務器發生故障,而沒有備份服務器來提供服務時,業務就必須得停止,這樣會對企業帶來巨大的損失。
2)為了提高數據庫服務器的穩定性,加快數據處理的效率,保護數據免受意外的損失,我們采用mysql的主從復制方式,分離對數據庫的查詢和更新操作,使用從服務器上備份的數據保證來數據的安全性和穩定性。

二、Mysql主從復制的原理

1)MySQL 的 Replication 是一個異步的復制過程,從一個 MySQL instace(我們稱之為 Master)復制到另一個MySQL instance(我們稱之 Slave)。

  在 Master 與 Slave 之間的實現整個復制過程主要由三個線程來完成,其中兩個線程(Sql 線程和IO 線程)在 Slave 端,另外一個線程(IO 線程)在 Master 端。 

2)在執行這個主從復制之前,首先必須打開 Master 端的Binary Log(MySQL-bin.xxxxxx)功能,否則無法實現。
  在啟動 MySQL Server 的過程中使用“log-bin” 參數選項
  在 my.cnf 配置文件中的 MySQLd 參數組中增加“log-bin” 參數項

三、Mysql主從復制的過程

3.1、主從復制詳細過程

  1) Slave 上面的IO 線程連接上 Master,並請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容
  2) Master 接收到來自 Slave 的 IO 線程的請求后,通過負責復制的 IO 線程根據請求信息讀取指定日志指定位置之后的日志信息,返回給 Slave 端的 IO 線程。

    返回信息中除了日志所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 BinaryLog 中的位置。

  3)Slave 的 IO 線程接收到信息后,將接收到的日志內容依次寫入到 Slave 端的RelayLog (中繼日志文件)文件(MySQL-relay-bin.xxxxxx)的最末端,並將讀取到的Master 端的bin-log 的文件名和位置記錄到master-info 文件中

    以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log 的哪個位置開始往后的日志內容,請發給我” 。
  4)Slave 的 SQL 線程檢測到 Relay Log 中新增加了內容后,會馬上解析該 Log 文件中的內容成為在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。

    這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的數據是完全一樣的。

3.2、Mysql主從復制過程的圖形表示

  

四、MySQL支持的復制類型與MySQL復制應用類型

4.1、MySQL支持的復制類型

  1)基於語句的復制statement:  在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認采用基於語句的復制,效率比較高。一旦發現沒法精確復制時,會自動選着基於行的復制。   

  2)基於行的復制row:把改變的內容復制過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持

  3)混合類型的復制mixed: 默認采用基於語句的復制,一旦發現基於語句的無法精確的復制時,就會采用基於行的復制。

4.2、MySQL復制應用類型

  1)數據分布 (Data distribution )

  2)負載平衡(load balancing)

  3)讀寫分離(split reading and writting)

  4)高可用性和容錯性 (High availability and failover )

五、MySQL(主從復制)集群配置過程

環境:

  首先我虛擬機中安裝了三台ubuntu操作系統:

  ubuntu的server版:1.0.0.3==server1

  ubuntu的desktop版(兩台):1.0.0.5=udzyh1。1.0.0.6=udzyh2

  注意搭建MySQL集群的時候,MySQL的版本盡量一致,大版本必須一致。(本人使用5.7.19)

5.1、主節點配置(server1,1.0.0.3)

  1)首先進入到MySQL的配置文件中去

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  2)修改、保存退出  

  [client]
  [mysqld]
  #bind-address=0.0.0.0

  server-id=11
  log-bin=mysql-bin-11
  binlog-format=row

    

  3)重啟MySQL服務   sudo service mysql restart

5.2、從節點配置(1.0.0.5=udzyh1、1.0.0.6=udzyh2)     

   注意:所有從節點的配置都一模一樣(主從復制,只能有一個主節點,可以用n多個從節點)

  1)首先進入到MySQL的配置文件中去

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  2)修改、保存退出  

  [mysqld]
  #bind....

  server-id=12
  relay-log=mysql-relay-12

    

  3)重啟MySQL服務   sudo service mysql restart

5.3、連接 

  1)在主節點的MySQL終端執行:
    grant replication slave,replication client on *.* to 'zyh'@'%' identified by '123456';(在主節點創建一個用戶)

  2)查看主節點的二進制文件名和插入位置

    show  master stauts \G

    

  3)在從節點的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;

   注意:n多個從節點都是相同的配置

  3)查看從節點的狀態

    show slave status \G

        

5.4、開啟主從復制

  start slave    

   

  1)查看所有數據庫

    在主節點中:

      

    在從節點中:

      1)2)

  2)主節點創建一個數據庫db_love在查看其它兩個從節點,你會發現驚喜

六、Replication管理和排錯

  1)show master status ; 查看master的狀態, 尤其是當前的日志及位置
  2)show slave status; 查看slave的狀態.
  3)reset slave ; 重置slave狀態,用於刪除SLAVE數據庫的relaylog日志文件,並重新啟用新的relaylog文件.會忘記 主從關系,它刪除master.info文件和relay-log.info 文件
  4)start slave ; 啟動slave 狀態(開始監聽msater的變化)
  5)stop slave; 暫停slave狀態;
  6)set global sql_slave_skip_counter = n 跳過導致復制終止的n個事件,僅在slave線程沒運行的狀況下使用

    

覺得不錯的點個“推薦”哦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM