Mysql雙機熱備配置(超詳細多圖版)


一、雙擊熱備介紹

1.基本概念

雙機熱備特指基於高可用系統中的兩台服務器的熱備(或高可用),雙機高可用按工作中的切換方式分為:主-備方式(Active-Standby方式)和雙主機方式(Active-Active方式),主-備方式即指的是一台服務器處於某種業務的激活狀態(即Active狀態),另一台服務器處於該業務的備用狀態(即Standby狀態)。而雙主機方式即指兩種不同業務分別在兩台服務器上互為主備狀態(即Active-Standby和Standby-Active狀態)。

2.實現方式

a.基於共享存儲(磁盤陣列)的方式

共享存儲方式主要通過磁盤陣列提供切換后,對數據完整性和連續性的保障。用戶數據一般會放在磁盤陣列上,當主機宕機后,備機繼續從磁盤陣列上取得原有數據

b.全冗余方式

全冗余方式就是雙機雙存儲

MySQL熱備原理

雙機熱備就是使用MySQL提供的一種主從備份機制實現。所謂雙機熱備其實是一個復制的過程,復制過程中一個服務器充當主服務器,一個或多個服務器充當從服務。這個復制的過程實質上是從服務器復制主服務器上MySQL的二進制日志(bin-log),並在從服務器上還原主服務器上的sql語句操作,這樣只要兩個數據庫的初態是一樣的,就能一直同步。

雙機熱備的實現需要MySQL的版本高於3.2.。另外由於這種備份是基於MySQL二進制日志實現,所以主從服務器上的MySQL版本最好能夠一樣,至少從服務器的MySQL版本不可以低於主服務器的數據庫版本。因為MySQL不同的版本之間二進制日志可能不一樣。

當然這種復制和重復都是MySQL自動實現的,我們只需要配置即可。

如下圖所示:

上圖中有兩個服務器, 演示了從一個主服務器(master) 把數據同步到從服務器(slave)的過程。

這是一個主-從復制的例子。 主-主互相復制只是把上面的例子反過來再做一遍。 所以我們以這個例子介紹原理。

對於一個mysql服務器, 一般有兩個線程來負責復制和被復制。當開啟復制之后。作為主服務器Master,會把自己的每一次改動都記錄到 二進制日志 Binarylog 中。 (從服務器會負責來讀取這個log, 然后在自己那里再執行一遍。)

作為從服務器Slave, 會用master上的賬號登陸到 master上, 讀取master的Binarylog,  寫入到自己的中繼日志 Relaylog, 然后自己的sql線程會負責讀取這個中繼日志,並執行一遍。  到這里主服務器上的更改就同步到從服務器上了。

配置步驟

第一步環境搭建:

現在有兩個服務器,分別為A(主服務器),B(從服務器)。

  • 為A和B分別分配靜態IP地址。我采用的是dhcp自動分配方式,A的ip地址為192.168.119.128,B的ip地址為192.168.119.130。
  • 保證A和B能夠ping通,在B上輸入命令

,如果出現以下結果:

,則說明A和B是能夠通信的,如果不能,則查看是否A和B是否在同一個局域網中,或者關閉linux系統的防火牆 命令為 : /etc/init.d/iptables stop。

  • 分別為A和B安裝mysql,client和server都需要安裝。

第二步 A(主服務器配置)配置

1.

進入mysql數據庫。輸入命令:

,然后根據提示輸入密碼。在A上面創建專門用於備份的用戶。命令如下:

grant replication slave on *.* to 'username'@'192.168.119.130' identified by '123456';

其中username是用戶名,192.168.119.130是B(從服務器)的ip地址,密碼為’123456’;這個等會在B上要用;

2.

創建數據庫。

我這里用的sql語句創建的 create database test;(具體實施的時候應該是直接導入數據庫,數據庫已經提前創建好了)。這個數據庫是來測試的。

3.

開啟A的binarylog

這里輸入命令:

,就會打開MySQL的配置文件。修改MySQL綁定的IP地址:

這個是MySQL默認的ip,這里修改成A的ip:192.168.119.128.

繼續修改如下配置

  • server-id =1 表示A的id(之前是被#注釋掉的)
  • Long_bin = mysql-bin.log 表示log日志,如果采用mysql之前默認的/var/log/mysql/mysql-bin.log會導致MySQL服務無法啟動。
  • binlog-do-db =test用來表示,只把哪些數據庫的改動記錄到binary日志中。 可以寫上關注test數據庫(這句話最關鍵)。
  • auto-increment-increment = 10和auto-increment-offset = 1用於在 雙主(多主循環)互相備份。 因為每台數據庫服務器都可能在同一個表中插入數據,如果表有一個自動增長的主鍵,那么就會在多服務器上出現主鍵沖突。  解決這個問題的辦法就是讓每個數據庫的自增主鍵不連續。  上圖說是, 我假設需要將來可能需要10台服務器做備份, 所以auto-increment-increment 設為10.   而 auto-increment-offset=1 表示這台服務器的序號。 從1開始, 不超過auto-increment-increment。
  • 所有設置完成之后,退出文本編輯,按ESC,再按shift+;鍵,然后輸入wq,就能保存當前設置,並退出。
  • 最后:重啟MySQL服務,輸入命令: service mysql restart。

4.

獲取主服務器狀態和同步狀態。

注:因為數據庫庫是已經提前創建好的,所以以下步驟可以省略

現在我有數據庫在A上面;

輸入命令 :use test 進入到test數據庫,

然后鎖定test,輸入命令:FLUSH TABLES WITH READ LOCK;

然后導出數據庫。

注:以下這一步驟需要進行!

查看A服務器的binary日志位置:

輸入命令:show master status\G

記住File和Position,接下來再設置從服務器的時候需要用到。

主服務器的全部做完,可以解除鎖定:

第三步:B(從服務器)配置

1.

設置從服務器的文件配置。

輸入命令:

,打開MySQL的配置文件。修改文件如下:

server-id 必須保證每個服務器不一樣。 這可能和循環同步有關。 防止進入死循環。

replicate-do-db 可以指定需要復制的數據庫, 這里是test。

relay_log 中繼日志的名字。 log-slave-updates 意思是,中繼日志執行之后,這些變化是否需要計入自己的binarylog。 當你的B服務器需要作為另外一個服務器的主服務器的時候需要打開。  就是雙主互相備份,或者多主循環備份。 我們這里需要, 所以打開。

修改完成之后,保存,重啟MySQL;

2.

導入數據庫,開始同步。

實施人員將數據庫導入到B中的MySQL。這里我就不詳細了。

我導入的是test數據庫。

進入MySQL,輸入命令:mysql -uroot -p 輸入密碼后進入。

在mysql中輸入:

CHANGE MASTER TO

       MASTER_HOST='192.168.119.128',

       MASTER_USER='username',

       MASTER_PASSWORD='123456',

       MASTER_LOG_FILE='mysql-bin.000003',

       MASTER_LOG_POS=510;

執行此語句,會出現

重啟MySQL, 然后查看slave線程開啟了沒。

注意圖中的紅框, 兩個都是Yes, 說明開啟成功。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果其中一個是No, 那就說明不成功。需要查看mysql的錯誤日志。。有時候密碼填錯了, 有時候防火牆的3306沒有打開。ip地址不對,等等。 都會導致失敗。

到這里就全部配置完成了。

第四步 測試

1.在A服務器的test的數據庫中的mytable表(這個是用來測試的,其他數據庫不一定有),添加一條數據。

A:未添加前的狀態:

B的數據庫

現在A和B的初態是一樣的。現在我往A里面插入一條數據,輸入命令:

insert into mytable values(‘test’,’f’,’1900-01-01’,’china’);

插入成功,現在A的狀態更新為:

與此同時B的數據庫也更新為:

這個動作是同時的,幾乎沒有什么間隔。

好了,MySQL的雙機熱備數據同步就完成了。

 

from:https://cloud.tencent.com/developer/article/1088706


免責聲明!

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



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