MYSQL數據庫主從複製(一)

    MYSQL主從複製原理

1 複製概述

      Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是通過將Mysql的某一臺主機的數據複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。

請注意當你進行復制時,所有對複製中的表的更新必須在主服務器上進行。否則,你必須要小心,以避免用戶對主服務器上的表進行的更新與對從服務器上的表所進行的更新之間的衝突。

1.1 mysql支持的複製類型:

(1):基於語句的複製:  在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認採用基於語句的複製,效率比較高。  
            一旦發現沒法精確複製時,   會自動選着基於行的複製。    
  (2):基於行的複製:把改變的內容複製過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持
  (3):混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。

截圖03.png


該過程的第一部分就是master記錄二進制日誌。在每個事務更新數據完成之前,master在二日誌記錄這些改變。MySQL將事務串行的寫入二進制日誌,即使事務中的語句都是交叉執行的。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。
       下一步就是slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然後開始binlog dump process。Binlog dump process從master的二進制日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。
       SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。
        此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。複製過程有一個很重要的限制——複製在slave上是串行化的,也就是說master上的並行更新操作不能在slave上並行操作。

2 .複製配置

有兩臺MySQL數據庫服務器Master和slave,Master爲主服務器,slave爲從服務器,初始狀態時,Master和slave中的數據信息相同,當Master中的數據發生變化時,slave也跟着發生相應的變化,使得master和slave的數據信息同步,達到備份的目的。

要點:
負責在主、從服務器傳輸各種修改動作的媒介是主服務器的二進制變更日誌,這個日誌記載着需要傳輸給從服務器的各種修改動作。因此,主服務器必須激活二進制日誌功能。從服務器必須具備足以讓它連接主服務器並請求主服務器把二進制變更日誌傳輸給它的權限。

環境:
Master和slave的MySQL數據庫版本同爲5.7

操作系統:Centos7.2
master IP地址:192.168.0.6

Slave IP 地址 :192.168.0.8

一:(1)建立事件同步環境,在主節點上搭建時間同步服務器

安裝NTP

[root@localhost /]# yum -y install ntp

2)配置NTP

[root@localhost /]# vim /etc/ntp.conf

截圖04.png

重啓服務

截圖05.png

(2)在從節點上進行時間同步

[root@localhost /]# yum -y install ntpdate
[root@localhost /]# /usr/sbin/ntpdate  192.168.0.6

在每臺服務器上關閉firewalled也可以進行開放

[root@localhost /]# setenforce 0

[root@localhost /]# systemctl stop firewalld.service 

安裝數據庫過程直接就不用太多描述

(2)配置mysql master主服務器

/etc/my.cnf中修改或者添加下面內容

截圖06.png

[root@localhost /]# systemctl restart mysqld

登陸mysql程序 給從服務器進行授權

截圖07.png

其中File列顯示日誌名 Position顯示編譯量 這倆個值在後面配置從服務器的時候需要slave從該節點在master上進行更新

截圖11.png

(2)配置從服務器

/etc/my.cnf中修改或者添加下面內容   server ID不能相同  啓動服務

截圖09.png

(2)登陸mysql 配置同步

按主服務器結果更改下面命令中 master-log-file 和 master—log-pos參數

截圖12.png

啓動同步

mysql> start slave;

mysql> show slave status\G;

截圖13.png

(2)驗證主從複製效果

在主服務器登陸MYSQL  創建庫  在從服務器查看

截圖14.png

在從服務器查看效果 主從複製是否成功

截圖15.png

後面更新mysql數據庫讀寫分離


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章