構建基本的mysql伺服器,構建基本的mysql伺服器是什麼

本文目錄一覽:

五大常見的MySQL高可用方案(最全)

1. 概述

我們在考慮MySQL資料庫的高可用的架構時,主要要考慮如下幾方面:

如果資料庫發生了宕機或者意外中斷等故障,能儘快恢復資料庫的可用性,儘可能的減少停機時間,保證業務不會因為資料庫的故障而中斷。

用作備份、只讀副本等功能的非主節點的數據應該和主節點的數據實時或者最終保持一致。

當業務發生資料庫切換時,切換前後的資料庫內容應當一致,不會因為數據缺失或者數據不一致而影響業務。

關於對高可用的分級在這裡我們不做詳細的討論,這裡只討論常用高可用方案的優缺點以及高可用方案的選型。

2. 高可用方案

2.1. 主從或主主半同步複製

使用雙節點資料庫,搭建單向或者雙向的半同步複製。在5.7以後的版本中,由於lossless replication、logical多線程複製等一些列新特性的引入,使得MySQL原生半同步複製更加可靠。

常見架構如下:

通常會和proxy、keepalived等第三方軟體同時使用,即可以用來監控資料庫的 健康 ,又可以執行一系列管理命令。如果主庫發生故障,切換到備庫後仍然可以繼續使用資料庫。

優點:

架構比較簡單,使用原生半同步複製作為數據同步的依據;

雙節點,沒有主機宕機後的選主問題,直接切換即可;

雙節點,需求資源少,部署簡單;

缺點:

完全依賴於半同步複製,如果半同步複製退化為非同步複製,數據一致性無法得到保證;

需要額外考慮haproxy、keepalived的高可用機制。

2.2. 半同步複製優化

半同步複製機制是可靠的。如果半同步複製一直是生效的,那麼便可以認為數據是一致的。但是由於網路波動等一些客觀原因,導致半同步複製發生超時而切換為非同步複製,那麼這時便不能保證數據的一致性。所以儘可能的保證半同步複製,便可提高數據的一致性。

該方案同樣使用雙節點架構,但是在原有半同複製的基礎上做了功能上的優化,使半同步複製的機制變得更加可靠。

可參考的優化方案如下:

2.2.1. 雙通道複製

半同步複製由於發生超時後,複製斷開,當再次建立起複制時,同時建立兩條通道,其中一條半同步複製通道從當前位置開始複製,保證從機知道當前主機執行的進度。另外一條非同步複製通道開始追補從機落後的數據。當非同步複製通道追趕到半同步複製的起始位置時,恢復半同步複製。

2.2.2. binlog文件伺服器

搭建兩條半同步複製通道,其中連接文件伺服器的半同步通道正常情況下不啟用,當主從的半同步複製發生網路問題退化後,啟動與文件伺服器的半同步複製通道。當主從半同步複製恢復後,關閉與文件伺服器的半同步複製通道。

優點:

雙節點,需求資源少,部署簡單;

架構簡單,沒有選主的問題,直接切換即可;

相比於原生複製,優化後的半同步複製更能保證數據的一致性。

缺點:

需要修改內核源碼或者使用mysql通信協議。需要對源碼有一定的了解,並能做一定程度的二次開發。

依舊依賴於半同步複製,沒有從根本上解決數據一致性問題。

2.3. 高可用架構優化

將雙節點資料庫擴展到多節點資料庫,或者多節點資料庫集群。可以根據自己的需要選擇一主兩從、一主多從或者多主多從的集群。

由於半同步複製,存在接收到一個從機的成功應答即認為半同步複製成功的特性,所以多從半同步複製的可靠性要優於單從半同步複製的可靠性。並且多節點同時宕機的幾率也要小於單節點宕機的幾率,所以多節點架構在一定程度上可以認為高可用性是好於雙節點架構。

但是由於資料庫數量較多,所以需要資料庫管理軟體來保證資料庫的可維護性。可以選擇MMM、MHA或者各個版本的proxy等等。常見方案如下:

2.3.1. MHA+多節點集群

MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將最新數據的slave提升為新的master,然後將所有其他的slave重新指向新的master,整個故障轉移過程對應用程序完全透明。

MHA Node運行在每台MySQL伺服器上,主要作用是切換時處理二進位日誌,確保切換盡量少丟數據。

MHA也可以擴展到如下的多節點集群:

優點:

可以進行故障的自動檢測和轉移;

可擴展性較好,可以根據需要擴展MySQL的節點數量和結構;

相比於雙節點的MySQL複製,三節點/多節點的MySQL發生不可用的概率更低

缺點:

至少需要三節點,相對於雙節點需要更多的資源;

邏輯較為複雜,發生故障後排查問題,定位問題更加困難;

數據一致性仍然靠原生半同步複製保證,仍然存在數據不一致的風險;

可能因為網路分區發生腦裂現象;

2.3.2. zookeeper+proxy

Zookeeper使用分散式演算法保證集群數據的一致性,使用zookeeper可以有效的保證proxy的高可用性,可以較好的避免網路分區現象的產生。

優點:

較好的保證了整個系統的高可用性,包括proxy、MySQL;

擴展性較好,可以擴展為大規模集群;

缺點:

數據一致性仍然依賴於原生的mysql半同步複製;

引入zk,整個系統的邏輯變得更加複雜;

2.4. 共享存儲

共享存儲實現了資料庫伺服器和存儲設備的解耦,不同資料庫之間的數據同步不再依賴於MySQL的原生複製功能,而是通過磁碟數據同步的手段,來保證數據的一致性。

2.4.1. SAN共享儲存

SAN的概念是允許存儲設備和處理器(伺服器)之間建立直接的高速網路(與LAN相比)連接,通過這種連接實現數據的集中式存儲。常用架構如下:

使用共享存儲時,MySQL伺服器能夠正常掛載文件系統並操作,如果主庫發生宕機,備庫可以掛載相同的文件系統,保證主庫和備庫使用相同的數據。

優點:

兩節點即可,部署簡單,切換邏輯簡單;

很好的保證數據的強一致性;

不會因為MySQL的邏輯錯誤發生數據不一致的情況;

缺點:

需要考慮共享存儲的高可用;

價格昂貴;

2.4.2. DRBD磁碟複製

DRBD是一種基於軟體、基於網路的塊複製存儲解決方案,主要用於對伺服器之間的磁碟、分區、邏輯卷等進行數據鏡像,當用戶將數據寫入本地磁碟時,還會將數據發送到網路中另一台主機的磁碟上,這樣的本地主機(主節點)與遠程主機(備節點)的數據就可以保證實時同步。常用架構如下:

當本地主機出現問題,遠程主機上還保留著一份相同的數據,可以繼續使用,保證了數據的安全。

DRBD是linux內核模塊實現的快級別的同步複製技術,可以與SAN達到相同的共享存儲效果。

優點:

兩節點即可,部署簡單,切換邏輯簡單;

相比於SAN儲存網路,價格低廉;

保證數據的強一致性;

缺點:

對io性能影響較大;

從庫不提供讀操作;

2.5. 分散式協議

分散式協議可以很好解決數據一致性問題。比較常見的方案如下:

2.5.1. MySQL cluster

MySQL cluster是官方集群的部署方案,通過使用NDB存儲引擎實時備份冗餘數據,實現資料庫的高可用性和數據一致性。

優點:

全部使用官方組件,不依賴於第三方軟體;

可以實現數據的強一致性;

缺點:

國內使用的較少;

配置較複雜,需要使用NDB儲存引擎,與MySQL常規引擎存在一定差異;

至少三節點;

2.5.2. Galera

基於Galera的MySQL高可用集群, 是多主數據同步的MySQL集群解決方案,使用簡單,沒有單點故障,可用性高。常見架構如下:

優點:

多主寫入,無延遲複製,能保證數據強一致性;

有成熟的社區,有互聯網公司在大規模的使用;

自動故障轉移,自動添加、剔除節點;

缺點:

需要為原生MySQL節點打wsrep補丁

只支持innodb儲存引擎

至少三節點;

2.5.3. POAXS

Paxos 演算法解決的問題是一個分散式系統如何就某個值(決議)達成一致。這個演算法被認為是同類演算法中最有效的。Paxos與MySQL相結合可以實現在分散式的MySQL數據的強一致性。常見架構如下:

優點:

多主寫入,無延遲複製,能保證數據強一致性;

有成熟理論基礎;

自動故障轉移,自動添加、剔除節點;

缺點:

只支持innodb儲存引擎

至少三節點;

3. 總結

隨著人們對數據一致性的要求不斷的提高,越來越多的方法被嘗試用來解決分散式數據一致性的問題,如MySQL自身的優化、MySQL集群架構的優化、Paxos、Raft、2PC演算法的引入等等。

而使用分散式演算法用來解決MySQL資料庫數據一致性的問題的方法,也越來越被人們所接受,一系列成熟的產品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越來越多的被大規模使用。

隨著官方MySQL Group Replication的GA,使用分散式協議來解決數據一致性問題已經成為了主流的方向。期望越來越多優秀的解決方案被提出,MySQL高可用問題可以被更好的解決。

mysql安裝配置教程是什麼?

安裝MySQL

步驟

1、雙擊下載的MySQL安裝文件,進入MySQL安裝界面,首先進入「License Agreement(用戶許可證協議)」窗口,選中「I accept the license terms(我接受系統協議)」複選框,單擊「Next(下一步)」按鈕即可。有的會直接進入「Choosing a Setup Type(安裝類型選擇)」窗口,根據右側的安裝類型描述文件選擇適合自己的安裝類型,這裡選擇默認的安裝類型,如圖所示。

2、根據所選擇的安裝類型安裝Windows系統框架(framework),單擊Execute按鈕,安裝程序會自動完成框架的安裝,如圖所示。

3、當彈出安裝程序窗口時,勾選「我同意許可條款和條件」複選框,然後單擊「安裝」按鈕,如圖所示。

4、彈出「設置成功」的界面,表示該框架已經安裝完成,單擊「關閉」按鈕即可。所有的框架安裝均可參考本操作,如圖所示。

5、安裝完成後會在【status】列表下顯示Complete(安裝完成)。所需框架均安裝成功後,點擊Next按鈕,如圖所示。

6、進入安裝確認窗口,點擊Execute按鈕,開始MySQL各個組件的安裝,如圖所示。

7、開始安裝 MySQL 文件,安裝完成後在【Status】列表下顯示 Complete,如圖所示。

配置MySQL

MySQL安裝完成之後,需要對伺服器進行配置,具體配置步驟如下:步驟

1、在安裝的最後一步中,點擊Next按鈕進入伺服器配置窗口,進行配置信息的確認,確認後點擊Next按鈕,如圖所示。

2、進入MySQL網路類型配置窗口,採用默認設置,點擊Next按鈕,如圖所示。

3、進入MySQL伺服器類型配置窗口,採用默認設置,點擊Next按鈕,如圖所示。

4、MySQL埠號默認3306,如果沒有特殊需求一般不建議修改。繼續點擊Next按鈕即可。

5、進入設置伺服器的密碼窗口,重複輸入兩次登錄密碼(建議字母數字加符號),點擊Next按鈕,如圖所示。

6、進入伺服器名稱窗口設置伺服器名稱,這裡無特殊需要也不建議修改。繼續單擊Next按鈕,如圖所示。

7、打開確認設置伺服器窗口,點擊Execute按鈕完成MySQL的各項配置,如圖所示。

8、最後打開Windows任務管理器對話框,可以看到MySQL服務進程mysqld.exe已經啟動了,如圖所示。至此,就完成了Windows操作系統下MySQL資料庫的安裝和配置。

如何用java 5分鐘實現一個最簡單的mysql代理伺服器

如何用java 5分鐘實現一個最簡單的mysql代理伺服器

首先,準備開發工具套件,我們並不會引入過多工具包,僅僅需要:

java8

vert.x 3

如果你是用maven做為項目管理工具,請將vert.x 3引入:

1

2

3

4

5

dependency

groupIdio.vertx/groupId

artifactIdvertx-core/artifactId

version3.3.2/version

/dependency

代碼實現:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

package

com.maxleap.mysqlproxy;

import

io.vertx.core.AbstractVerticle;

import

io.vertx.core.Vertx;

import

io.vertx.core.logging.Logger;

import

io.vertx.core.logging.LoggerFactory;

import

io.vertx.core.net.NetClient;

import

io.vertx.core.net.NetServer;

import

io.vertx.core.net.NetSocket;

/**

*

@author sneaky

*

@since 1.0.0

*/

public

class

MysqlProxyServer

{

private

static

final

Logger

logger

=

LoggerFactory.getLogger(MysqlProxyServer.class);

public

static

void

main(String[]

args)

{

Vertx.vertx().deployVerticle(new

MysqlProxyServerVerticle());

}

public

static

class

MysqlProxyServerVerticle

extends

AbstractVerticle

{

private

final

int

port

=

3306;

private

final

String

mysqlHost

=

“10.10.0.6”;

@Override

public

void

start()

throws

Exception

{

NetServer

netServer

=

vertx.createNetServer();//創建代理伺服器

NetClient

netClient

=

vertx.createNetClient();//創建連接mysql客戶端

netServer.connectHandler(socket

netClient.connect(port,

mysqlHost,

result

{

//響應來自客戶端的連接請求,成功之後,在建立一個與目標mysql伺服器的連接

if

(result.succeeded())

{

//與目標mysql伺服器成功連接連接之後,創造一個MysqlProxyConnection對象,並執行代理方法

new

MysqlProxyConnection(socket,

result.result()).proxy();

mysql怎樣創建資料庫伺服器

需要用到集群,負載均衡及mysql

複製(replication);

下面提供一個系統模型你可以參考一下:

集群的結構為一個主MySQL伺服器(Master)伺服器與多個從屬MySQL伺服器(Slave)建立複製(replication)連接,主伺服器與從屬伺服器實現一定程度上的數據同步,多個從屬伺服器存儲相同的數據副本,實現數據冗餘,提供容錯功能。部署開發應用系統時,對資料庫操作代碼進行優化,將寫操作(如UPDATE、INSERT)定向到主伺服器,把大量的查詢操作(SELECT)定向到從屬伺服器,實現集群的負載均衡功能。如果主伺服器發生故障,從屬伺服器將轉換角色成為主伺服器,使應用系統為終端用戶提供不間斷的網路服務;主伺服器恢復運行後,將其轉換為從屬伺服器,存儲資料庫副本,繼續對終端用戶提供數據查詢檢索服務。

mysql 伺服器如何設定

第1步,執行「應用程序」/「系統設置」/「伺服器設置」/「Samba」菜單命令,將彈出「Samba伺服器配置」對話框。

第2步,在彈出的「Samba伺服器配置」對話框中執行「首選項」/「伺服器設置」命令,將彈出「伺服器設置」對話框。在該對話框的「基本」選項卡中設置工具組名稱,可與Windows操作系統工作組的名稱相同,也可在「描述」文本框中填寫計算機的描述語言,它將在網路中顯示。

第3步,切換到「安全性」選項卡,在該選項卡中設置驗證模式「共享」、加密口令為「否」、來賓賬戶「無來賓賬戶」,最後單擊「確定」按鈕完成伺服器配置。

第4步,單擊「Samba伺服器配置」對話框中工具欄上「添加」按鈕,將彈出「創建Samba共享」對話框,在「目錄」文本框中輸入需要共享的目錄路徑和目錄名,在「共享名」文本框中輸入網路中顯示的名稱,默認為共享目錄名,也可在描述文本框中輸入一些說明,在「基本許可權」中可以選擇用戶是否有許可權對共享目錄進行寫操作,若不需網路中的客戶對共享的資源進行修改,則選擇「只讀」選項。

第5步,切換到「訪問」選項卡,在該選項卡中選擇「允許所有用戶訪問」選項,最後單擊「確定」按鈕完成伺服器配置。

第6步,關閉「伺服器配置」對話框,執行「應用程序」/「系統設置」/「伺服器設置」/「服務」菜單命令,在該對話框的服務列表中選中「smb」,再單擊工具欄中的「重啟」按鈕。

第7步,通過以上的配置,Samba伺服器就配置完成了。在Windows操作系統中打開網上鄰居,在網上鄰居中即可看到Linux操作系統rho1的共享「cdrom」。

原創文章,作者:ZQQX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139204.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZQQX的頭像ZQQX
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字元串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • 伺服器安裝Python的完整指南

    本文將為您提供伺服器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 伺服器

    STUN 伺服器是一個網路伺服器,可以協助網路設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 伺服器做詳…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python基本統計量計算

    本文將從多個方面詳細介紹Python中基本統計量計算的方法。 一、均值 均值是一組數據的平均值,也就是將所有數據相加後再除以數據個數。 在Python中,可以使用numpy庫中的m…

    編程 2025-04-29
  • Python程序的三種基本控制結構

    控制結構是編程語言中非常重要的一部分,它們指導著程序如何在不同的情況下執行相應的指令。Python作為一種高級編程語言,也擁有三種基本的控制結構:順序結構、選擇結構和循環結構。 一…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29

發表回復

登錄後才能評論