標籤:1.5 混合 效果 image 開始 原理 工作 ack under
MYSQL主從複製原理
1 複製概述
Mysql內建的複製功能是構建大型,高效能應用程式的基礎。將Mysql的資料分布到多個系統上去,這種分布的機制,是通過將Mysql的某一台主機的資料複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位記錄檔,並維護檔案的一個索引以追蹤記錄檔迴圈。這些日誌可以記錄發送到從伺服器的更新。當一個從伺服器串連主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。
請注意當你進行複製時,所有對複製中的表的更新必須在主伺服器上進行。否則,你必須要小心,以避免使用者對主伺服器上的表進行的更新與對從伺服器上的表所進行的更新之間的衝突。
1.1 mysql支援的複製類型:
(1):基於語句的複製: 在主伺服器上執行的SQL語句,在從伺服器上執行同樣的語句。MySQL預設採用基於語句的複製,效率比較高。
一旦發現沒法精確複製時, 會自動選著基於行的複製。
(2):基於行的複製:把改變的內容複寫過去,而不是把命令在從伺服器上執行一遍. 從mysql5.0開始支援
(3):混合類型的複製: 預設採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
該過程的第一部分就是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
[[email protected] /]# yum -y install ntp
(2)配置NTP
[[email protected] /]# vim /etc/ntp.conf
重啟服務
(2)在從節點上進行時間同步
[[email protected] /]# yum -y install ntpdate[[email protected] /]# /usr/sbin/ntpdate 192.168.0.6
在每台伺服器上關閉firewalled也可以進行開放
[[email protected] /]# setenforce 0
[[email protected] /]# systemctl stop firewalld.service
安裝資料庫過程直接就不用太多描述
(2)配置mysql master主伺服器
在/etc/my.cnf中修改或者添加下面內容
[[email protected] /]# systemctl restart mysqld
登陸mysql程式 給從伺服器進行授權
其中File列顯示日誌名 Position顯示編譯量 這倆個值在後面配置從伺服器的時候需要slave從該節點在master上進行更新
(2)配置從伺服器
在/etc/my.cnf中修改或者添加下面內容 server ID不能相同 啟動服務
(2)登陸mysql 配置同步
按主伺服器結果更改下面命令中 master-log-file 和 master—log-pos參數
啟動同步
mysql> start slave;
mysql> show slave status\G;
(2)驗證主從複製效果
在主伺服器登陸MYSQL 建立庫 在從伺服器查看
在從伺服器查看效果 主從複製是否成功
後面更新mysql資料庫讀寫分離
MYSQL資料庫主從複製(一)