MySQL主從複製的實現過程及部署

一、什麼是主從複製

將主數據庫中的DDL和DML操作通過二進制日誌傳輸到從數據庫上,然後將這些日誌重新執行(重做);從而使得從數據庫的數據與主數據庫保持一致。

基本原理:

MySQL支持單向、異步複製,複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。
  MySQL複製是基於主服務器在二進制日誌中跟蹤所有對數據庫的更改。因此,要進行復制,必須在主服務器上啓用二進制日誌。每個從服務器從主服務器接收主服務器已經記錄到日誌的數據。
  當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,並在本機上執行相同的更新。然後封鎖並等待主服務器通知新的更新。從服務器執行備份不會干擾主服務器,在備份過程中主服務器可以繼續處理更新。

二、主從複製的作用

1、主數據庫出現問題,可以切換到從數據庫。
2、可以進行數據庫層面的讀寫分離。
3、可以在從數據庫上進行日常備份。

三、複製過程

在這裏插入圖片描述
Binary log:主數據庫的二進制日誌。
Relay log:從服務器的中繼日誌。

  • 第一步:master在每個事務更新數據完成之前,將該操作記錄串行地寫入到binlog文件中。
  • 第二步:salve開啓一個I/O Thread,該線程在master打開一個普通連接,主要工作是binlog dump process。如果讀取的進度已經跟上了master,就進入睡眠狀態並等待master產生新的事件。I/O線程最終的目的是將這些事件寫入到中繼日誌中。
  • 第三步:SQL Thread會讀取中繼日誌,並順序執行該日誌中的SQL事件,從而與主數據庫中的數據保持一致。

誤區主從複製能否代替備份?

答案:不能

例如:誤操作,也會被同步到從服務器;如果你在主上面誤刪除了某個表或者庫,這個操作同樣會被同步到從服務器。

面試題:主從複製的最大問題是什麼?

答案:延遲問題

四、主從複製的具體操作

Mysql數據庫沒有增量備份的機制,當數據量太大的時候備份是一個很大的問題。還好mysql數據庫提供了一種主從備份的機制,其實就是把主數據庫的所有的數據同時寫到備份的數據庫中。實現mysql數據庫的熱備份。

要想實現雙機的熱備,首先要了解主從數據庫服務器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作爲從數據庫的數據版本可以高於主服務器數據庫的版本,但是不可以低於主服務器的數據庫版本。

當然要實現mysql雙機熱備,除了mysql本身自帶的REPLICATION功能可以實現外,也可以用Heartbeat這個開源軟件來實現。不過本文主要還是講如何用mysql自帶的REPLICATION來實現mysql雙機熱備的功能。

環境介紹:

主服務器(Master) 192.168.88.10
從服務器(Slave) 192.168.88.10
MySQL:5.5版本
防火牆狀態:關閉

1、開啓二進制日誌

二進制日誌,即binlog日誌。由於Mysql不同版本之間的(二進制日誌)binlog格式可能會不太一樣,因此最好的搭配組合是主(Master)服務器的Mysql版本和從服務器(Slave)版本相同或者更低,主服務器的版本肯定不能高於從服務器版本。

我們分別在主從服務器上開啓二進制日誌

打開MySQL主配置文件

vim /etc/my.cnf

在標籤[mysqld]中添加兩行:

log-bin=mysql-bin	#啓動二進制日誌
server-id=***		#服務器ID號,一般以IP結尾的數字,必須設置不同

在這裏插入圖片描述

2、在主服務器上授權

進入mysql操作界面,在主服務器(Master)上爲從服務器(Slave)建立一個連接帳戶,該帳戶必須授予REPLICATION SLAVE權限。因爲從mysql版本3.2以後就可以通過REPLICATION對其進行雙機熱備的功能操作。

操作指令如下:

mysql> grant replication slave on *.* to asd@'192.168.88.20' identified by '123456';
mysql> flush privileges;	#刷新配置

創建好同步連接帳戶後,我們可以通過在從服務器(Slave)上用replicat帳戶對主服務器(Master)數據庫進行訪問下,看下是否能連接成功。

mysql -h 192.168.88.10 -uasd -p123456

3、查看二進制文件

繼續在主服務器(Master)上面登陸MySQL,輸入:

show master status;

在這裏插入圖片描述

4、配置從服務器(Slave)

在從服務器(Slave)上面登陸MySQL,輸入:

change master to
master_user='asd',						#授權用戶
master_password='123456',				#密碼
master_host='192.168.64.24',			#主機IP
master_log_file='mysql-bin.000003',		#主服務器的二進制日誌
master_log_pos=259;						#當前日誌大小

輸入完之後推出輸入庫,到MySQL目錄下,我們可以看到master.info這個文件。

在這裏插入圖片描述

5、開啓從服務器(Slave)

在從服務器(Slave)上面登陸MySQL,輸入:

show slave status\G;

在這裏插入圖片描述

6、驗證主從複製

先到主服務器(Master)上創建一個叫abc的庫

create database abc;

然後到從服務器(Slave)上查看:

show databases;

在這裏插入圖片描述

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