mysql數據庫之mmm(mysql數據庫之父)

本文目錄一覽:

MySQL如何實現高可用?

1. 概述

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

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

2. 高可用方案

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

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

常見架構如下:

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

優點:

缺點:

2.2. 半同步複製優化

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

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

可參考的優化方案如下:

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

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

優點:

缺點:

2.3. 高可用架構優化

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

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

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

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

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

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

優點:

缺點:

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

優點:

缺點:

2.4. 共享存儲

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

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

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

優點:

缺點:

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

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

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

優點:

缺點:

2.5. 分佈式協議

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

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

優點:

缺點:

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

優點:

缺點:

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

優點:

缺點:

3. 總結

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

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

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

分佈式解決方案 tidb

多主 多備 master lvs做vip 讀寫分離中間件

mysql-mmm創建的虛擬ip有什麼要求

配置了mysql-mmm後,tomcat連接數據庫時,寫的是虛擬ip還是實際ip

mmm_agent.conf

include mmm_common.conf

# include 包含了mmm_common.conf配置文件的內容

# The ‘this’ variable refers to this server. Proper operation requires

# that ‘this’ server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this db1

# this 指定了當前主機為db1

mmm_common.conf

active_master_role writer

# One should set read-only=1 in the configuration of all MySQL servers,

# MMM will change that to read-only=0 on the host with the active_master_role.

# 設置寫角色的時候,會執行set global read_only = 0;

cluster_interface eth0

# network interface on which the IPs of the roles should be configured

# 配置的網絡接口,注意不能指定為子接口,例如eth0:0

agent_port 9989

# Port on which mmm_agentd listens

# mmm_agentd的監聽端口,默認為9989

mysql_port 3306

# Port on which mysqld is listening

# 監聽的mysql端口,默認3306

pid_path /var/run/mysql-mmm/mmm_agentd.pid

# Location of pid-file

# pid文件位置,如果配置cluster模式,需要增加cluster標識.

bin_path /usr/libexec/mysql-mmm/

# Path to directory containing MMM binaries

# mmm執行文件路徑,注意:2.0版本和2.1版本的路徑不一樣.

replication_user replication

replication_password XXX

MySQL MMM 支持 GTID嗎

有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。

1. check table 和 repair table

登陸mysql 終端:

mysql -uxxxxx -p dbname

check table tabTest;

如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:

repair table tabTest;

進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裏面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為缺省的數據表類型,這裡以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:

myisamchk tablename.MYI

進行檢測,如果需要修復的話,可以使用:

myisamchk -of tablename.MYI

關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。

-----------------------------

另外可以把下面的命令放在你的rc.local裏面啟動MySQL服務器前:

[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數據庫存放的位置。

需要注意的時,如果你打算把這條命令放在你的rc.local裏面,必須確認在執行這條指令時MySQL服務器必須沒有啟動!檢測修復所有數據庫(表)

扛得住的MySQL數據庫架構

數據庫優化是系統工程,性能的提升靠整體。本課程將面面俱到的講解提升數據庫性能的各種因素,讓你在最短的時間從小白到資深,將數據庫整體架構瞭然於胸

第1章 實例和故事 試看7 節 | 50分鐘

決定電商11大促成敗的各個關鍵因素。

收起列表

視頻:1-1 什麼決定了電商雙11大促的成敗 (04:04)試看

視頻:1-2 在雙11大促中的數據庫服務器 (06:03)

視頻:1-3 在大促中什麼影響了數據庫性能 (07:55)

視頻:1-4 大錶帶來的問題 (14:13)

視頻:1-5 大事務帶來的問題 (17:27)

作業:1-6 【討論題】在日常工作中如何應對高並發大數據量對數據庫性能挑戰

作業:1-7 【討論題】在MySQL中事務的作用是什麼?

第2章 什麼影響了MySQL性能 試看30 節 | 210分鐘

詳細介紹影響性能各個因素,包括硬件、操作系統等等。

收起列表

視頻:2-1 影響性能的幾個方面 (04:08)試看

視頻:2-2 CPU資源和可用內存大小 (10:54)

視頻:2-3 磁盤的配置和選擇 (04:44)

視頻:2-4 使用RAID增加傳統機器硬盤的性能 (11:30)

視頻:2-5 使用固態存儲SSD或PCIe卡 (08:35)

視頻:2-6 使用網絡存儲SAN和NAS (07:16)

視頻:2-7 總結:服務器硬件對性能的影響 (03:27)

視頻:2-8 操作系統對性能的影響-MySQL適合的操作系統 (03:50)

視頻:2-9 CentOS系統參數優化 (11:43)

視頻:2-10 文件系統對性能的影響 (03:29)

視頻:2-11 MySQL體系結構 (05:29)

視頻:2-12 MySQL常用存儲引擎之MyISAM (13:23)

視頻:2-13 MySQL常用存儲引擎之Innodb (10:44)

視頻:2-14 Innodb存儲引擎的特性(1) (15:24)

視頻:2-15 Innodb存儲引擎的特性(2) (08:44)

視頻:2-16 MySQL常用存儲引擎之CSV (09:19)

視頻:2-17 MySQL常用存儲引擎之Archive (06:08)

視頻:2-18 MySQL常用存儲引擎之Memory (10:40)

視頻:2-19 MySQL常用存儲引擎之Federated (11:21)

視頻:2-20 如何選擇存儲引擎 (04:33)

視頻:2-21 MySQL服務器參數介紹 (08:04)

視頻:2-22 內存配置相關參數 (09:24)

視頻:2-23 IO相關配置參數 (10:01)

視頻:2-24 安全相關配置參數 (06:13)

視頻:2-25 其它常用配置參數 (03:41)

視頻:2-26 數據庫設計對性能的影響 (04:36)

視頻:2-27 總結 (01:32)

作業:2-28 【討論題】你會如何配置公司的數據庫服務器硬件?

作業:2-29 【討論題】你認為對數據庫性能影響最大的因素是什麼

作業:2-30 【討論題】做為電商的DBA,建議開發選哪種MySQL存儲引擎

第3章 MySQL基準測試8 節 | 65分鐘

了解基準測試,MySQL基準測試工具介紹及實例演示。

收起列表

視頻:3-1 什麼是基準測試 (02:20)

視頻:3-2 如何進行基準測試 (09:00)

視頻:3-3 基準測試演示實例 (11:18)

視頻:3-4 Mysql基準測試工具之mysqlslap (13:30)

視頻:3-5 Mysql基準測試工具之sysbench (11:07)

視頻:3-6 sysbench基準測試演示實例 (17:11)

作業:3-7 【討論題】MySQL基準測試是否可以體現出業務系統的真實性能

作業:3-8 【實操題】參數不同取值對性能的影響

第4章 MySQL數據庫結構優化14 節 | 85分鐘

詳細介紹數據庫結構設計、範式和反範式設計、物理設計等等。

收起列表

視頻:4-1 數據庫結構優化介紹 (06:52)

視頻:4-2 數據庫結構設計 (14:49)

視頻:4-3 需求分析及邏輯設計 (11:00)

視頻:4-4 需求分析及邏輯設計-反範式化設計 (06:44)

視頻:4-5 範式化設計和反範式化設計優缺點 (04:06)

視頻:4-6 物理設計介紹 (05:17)

視頻:4-7 物理設計-數據類型的選擇 (18:59)

視頻:4-8 物理設計-如何存儲日期類型 (13:37)

視頻:4-9 物理設計-總結 (02:37)

圖文:4-10 說明MyISAM和Innodb存儲引擎的5點不同

作業:4-11 【討論題】判斷表結構是否符合第三範式要求?如不滿足要如何修改

作業:4-12 【實操題】請設計一個電商訂單系統的數據庫結構

作業:4-13 【討論題】以下那個字段適合作為Innodb表的主建使用

作業:4-14 【討論題】請為下表中的字段選擇合適的數據類型

第5章 MySQL高可用架構設計 試看24 節 | 249分鐘

詳細介紹二進制日誌及其對複製的影響、GTID的複製、MMM、MHA等等。

收起列表

視頻:5-1 mysql複製功能介紹 (04:58)

視頻:5-2 mysql二進制日誌 (22:05)

視頻:5-3 mysql二進制日誌格式對複製的影響 (09:37)

視頻:5-4 mysql複製工作方式 (03:08)

視頻:5-5 基於日誌點的複製 (20:06)

視頻:5-6 基於GTID的複製 (22:32)

視頻:5-7 MySQL複製拓撲 (13:58)

視頻:5-8 MySQL複製性能優化 (09:23)

視頻:5-9 MySQL複製常見問題處理 (08:31)

視頻:5-10 什麼是高可用架構 (14:09)

視頻:5-11 MMM架構介紹 (08:09)

視頻:5-12 MMM架構實例演示(上) (09:16)試看

視頻:5-13 MMM架構實例演示(下) (18:55)

視頻:5-14 MMM架構的優缺點 (08:01)

視頻:5-15 MHA架構介紹 (10:02)

視頻:5-16 MHA架構實例演示(1) (13:11)

視頻:5-17 MHA架構實例演示(2) (16:54)

視頻:5-18 MHA架構優缺點 (05:14)

視頻:5-19 讀寫分離和負載均衡介紹 (11:42)

視頻:5-20 MaxScale實例演示 (18:25)

作業:5-21 【討論題】MySQL主從複製為什麼會有延遲,延遲又是如何產生

作業:5-22 【實操題】請為某互聯網項目設計99.99%MySQL架構

作業:5-23 【討論題】如何給一個已經存在的主從複製集群新增一個從節點

作業:5-24 【討論題】給你三台數據庫服務器,你如何設計它的高可用架構

第6章 數據庫索引優化8 節 | 65分鐘

介紹BTree索引和Hash索引,詳細介紹索引的優化策略等等。

收起列表

視頻:6-1 Btree索引和Hash索引 (20:09)

視頻:6-2 安裝演示數據庫 (01:19)

視頻:6-3 索引優化策略(上) (17:33)

視頻:6-4 索引優化策略(中) (13:02)

視頻:6-5 索引優化策略(下) (12:30)

作業:6-6 【討論題】一列上建立了索引,查詢時就一定會用到這個索引嗎

作業:6-7 【討論題】在定義聯合索引時為什麼需要注意聯合索引中的順序

作業:6-8 【實操題】SQL建立索引,你會考慮那些因素

第7章 SQL查詢優化9 節 | 62分鐘

詳細介紹慢查詢日誌及示例演示,MySQL查詢優化器介紹及特定SQL的查詢優化等。

收起列表

視頻:7-1 獲取有性能問題SQL的三種方法 (05:14)

視頻:7-2 慢查詢日誌介紹 (08:57)

視頻:7-3 慢查詢日誌實例 (08:27)

視頻:7-4 實時獲取性能問題SQL (02:21)

視頻:7-5 SQL的解析預處理及生成執行計劃 (16:02)

視頻:7-6 如何確定查詢處理各個階段所消耗的時間 (09:35)

視頻:7-7 特定SQL的查詢優化 (10:34)

作業:7-8 【討論題】如何跟據需要對一個大表中的數據進行刪除或更新

作業:7-9 【討論題】如何獲取需要優化的SQL查詢

第8章 數據庫的分庫分表5 節 | 48分鐘

詳細介紹數據庫分庫分表的實現原理及演示案例等。

收起列表

視頻:8-1 數據庫分庫分表的幾種方式 (04:34)

視頻:8-2 數據庫分片前的準備 (13:53)

視頻:8-3 數據庫分片演示(上) (11:40)

視頻:8-4 數據庫分片演示(下) (17:02)

作業:8-5 【討論題】對於大表來說我們一定要進行分庫分表嗎

第9章 數據庫監控7 節 | 29分鐘

介紹數據庫可用性監控、性能監控、MySQL主從複製監控等

收起列表

視頻:9-1 數據庫監控介紹 (04:46)

視頻:9-2 數據庫可用性監控 (07:20)

視頻:9-3 數據庫性能監控 (09:39)

視頻:9-4 MySQL主從複製監控 (06:16)

作業:9-5 【討論題】QPS是否可以真實的反映出數據庫的負載情況

作業:9-6 【討論題】如何正確評估數據庫的當前負載狀況

作業:9-7 【實操題】開發一個簡單監控腳本,監控mySQL數據庫阻塞情況

mysql和mongodb的關係區別是什麼

1、數據庫模型:mysql是關係型數據庫,mongodb是非關係型數據庫

2、存儲方式:mysql不同的存儲引擎有不同的存儲方式,mongodb為虛擬內存+持久化

3、查詢語句:mysql為傳統的sql語句,mongodb有獨特的自有查詢方式

4、架構特點:mysql有常見的單點,m-s、mha、mmm、cluster等架構特點,mongodb可以通過副本集以及分片來實現高可用

5、數據處理方式:mysql不同的引擎有各自的特點,mongodb基於內存,將數據存儲在物理內存中,從而達到高速讀寫

6、成熟度:mysql擁有較為成熟的體系,成熟度較高,mongodb新興數據庫,成熟度較低

請教mysql高手

‘mmm’@’localhost’

USER@DOMAIN 都需要 ”

你需要 FLUSH PRIVILEGES

mysql FLUSH PRIVILEGES;

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/285321.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:44
下一篇 2024-12-22 15:44

相關推薦

  • 如何修改mysql的端口號

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

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

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

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

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

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

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

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論