亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL故障切換筆記之應用無感知設計詳解

2024-07-25 19:08:47
字體:
來源:轉載
供稿:網友

1. 簡介

大家都知道,在數據庫中間件讀寫分離應用場景中,如何保證底層數據庫出現故障節點的時,中間件可以快速斷開或遷移數據庫連接,讓用戶無感知。

在MySQL數據庫中,提供了一個session_track_transaction_info參數來提供解決方案。

因為官方文檔上沒有對該參數的說明,本文專門介紹該參數的可選值并驗證了實際的影響。下面話不多說了,來隨著小編一起看看詳細的介紹吧

2. session_track_transaction_info參數

2.1 參數介紹

MySQL5.7中,可以通過設置session_track_transaction_info變量來跟蹤事務的狀態。

  • 該參數存在global以及session兩個級別,可以動態修改。
  • 該參數可以設置的值為0(默認OFF),1,2
/** Transaction tracking level*/enum enum_session_track_transaction_info { TX_TRACK_NONE = 0, ///< do not send tracker items on transaction info TX_TRACK_STATE = 1, ///< track transaction status TX_TRACK_CHISTICS = 2 ///< track status and characteristics};

該參數允許設置的值為0,1,2

  • 設置為0的時候,show variables like '%session_track_transaction_info%'顯示為OFF,表示不開啟事務狀態跟蹤
  • 設置為1的時候,show variables like '%session_track_transaction_info%'顯示為STATE,表示跟蹤事務狀態
  • 設置為2的時候,show variables like '%session_track_transaction_info%'顯示為CHARACTERISTICS,表示跟蹤事務狀態和語句

2.2 參數設置影響

開啟session_track_transaction_info參數的時候,在數據庫中無法直接查詢到事務狀態記錄。

根據[WL#4797],MySQL是將事務狀態跟蹤的信息記錄到了每一個Query請求返回的OK packet中。

可以通過抓包的方式查看事務狀態信息。

2.2.1 原生MySQL OK packet格式

OK Packet的數據包格式定義

類型 名字 描述
int<1> 頭部 用0x00或者0xFE表示該數據包是一個OK Packet
int 影響的行數 影響的行數
int 上次插入的id 上次插入的id
int<2> 狀態標識 如果定義了CLIENT_PROTOCOL_41,會有這一部分
int<2> 警告數量 警告的數量,如果定義了CLIENT_PROTOCOL_41,會有這一部分
int<2> 狀態標識 如果定義了CLIENT_TRANSACTIONS,會有這一部分
string 信息 人類可讀的狀態信息,如果定義了CLIENT_SESSION_TRACK,會有這一部分
string 會話狀態 會話狀態信息,如果定義了SERVER_SESSION_STATE_CHANGED,會有這一部分
string 信息 人類可讀的信息

其中int<lenenc>和string<lenenc>中的lenenc表示的是LengthEcode。

MySQL-5.7.19代碼中封裝OK packet的代碼部分在protocol_classic.cc文件中的net_send_ok()函數中。

2.2.3 session_track_transaction_info 額外補充信息

session_track_transaction_info使用8個字符位來表示事務的信息,并且這8個字符信息是保存在COM_QUERY請求語句的返回數據包中的(客戶端執行一條語句,都會被封裝成MySQL協議中的COM_QUERY請求發送給server端,server端解析執行之后將結果封裝在數據包中返回)。

位置 表示信息 具體代表含義
Place 1 Transaction T 顯式的開啟一個事務 
I 隱式的開啟一個事務(@autocommit=0)
_ 沒有活躍的事務
Place 2 unsafe read r 當前事務中讀取了非事務性存儲引擎的表 
_ 當前事務中沒有讀取非事務性存儲引擎的表
Place 3 transaction read R 當前事務中讀取了事務性存儲引擎的表 
_ 當前事務中沒有讀取事務性存儲引擎的表
Place 4 unsafe wirte w 當前事務中寫入了非事務性存儲引擎的表 
_ 當前事務中沒有寫入非事務性存儲引擎的表
Place 5 transaction write W 當前事務中寫入了事務性存儲引擎的表 
_ 當前事務中沒有寫入事務性存儲引擎的表
Place 6 unsafe statement s 當前事務中使用了不安全的語句,類似于UUID() 
_ 沒有使用類似的不安全的語句
Place 7 result-set S 發送給了客戶端一個結果集 
_ 沒有結果集
Place 8 LOCKed TABLES L 表被顯式的通過LOCK TABLES 語句上鎖了 
_ 當前事務中沒有鎖表

2.2.2 session_track_transaction_info = 0時OK packet格式解析

session_track_transaction_info=0表示不記錄事務信息,所有在server端返回的數據包中沒有事務狀態跟蹤信息。

## session_track_transaction_info = 0客戶端執行begin;封裝的數據包06 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY62 65 67 69 6e # beginserver端返回的數據包:response 07 00 00 # playload_length 01 # sequence_id00 # 頭部 0x00表示是一個OK包00 # 影響的行數 000 # 上次插入的id03000000客戶端執行insert into t1 values(55)封裝的數據包1a 00 00 # playload_length 00 # sequence_id03 # command_type COM_QUERY696e7365727420696e746f2074312076616c75657328353529 # insert into t1 values(55)server端返回的數據包:response07 00 00 # playload_length01 # sequence_id00010003000000客戶端執行commit;封裝的數據包07 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY636f6d6d6974 # commitserver端返回的數據庫包:response07 00 00 # playload_length01 # sequence_id00000002000000

2.2.4 session_track_transaction_info = 1時OK packet格式解析

## session_track_transaction_info = 1客戶端執行begin;封裝的數據包06 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY626567696e # beginserver端返回的數據包:response14 00 00 # playload_length01 # sequence_id00 # 頭部 0x00表示是一個OK包00 # 影響的行數 000 # 上次插入的id03400000000b05090854 5f 5f 5f 5f 5f 5f 5f # 事務狀態信息 T_______# Place 1: 54 //顯式的開啟一個事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 5f //當前事務中沒有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表客戶端執行insert into t1 values(111)封裝的數據包1b 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY696e7365727420696e746f2074312076616c7565732831313129 # insert into t1 values(111)server端返回的數據包:response14 00 00 # playload_length01 # sequence_id00010003400000000b050908 54 5f 5f 5f 57 5f 5f 5f # 事務狀態信息 T___W___# Place 1: 54 //顯式的開啟一個事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 57 //當前事務中有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表客戶端執行commit;封裝的數據包07 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY636f6d6d6974 # commitserver端返回的數據包:response1400000100000002400000000b0509085f 5f 5f 5f 5f 5f 5f 5f # 事務狀態信息________# Place 1: 5f //沒有活躍的事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 5f //當前事務中沒有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表

2.2.5 session_track_transaction_info = 2時OK packet格式解析

將session_track_transaction_info參數設置為2的時候,會顯示更加詳細的事務狀態信息。

客戶端執行begin;封裝的數據包06 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY626567696e # beginserver端返回的數據包:response29 00 00 # playload_length01 # sequence_id00000003400000002005090854 5f 5f 5f 5f 5f 5f 5f # 事務狀態信息 T_______0413125354415254205452414e53414354494f4e3b # START TRANSACTION;# Place 1: 54 //顯式的開啟一個事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 5f //當前事務中沒有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表客戶端執行 insert into t1 values(222)封裝的數據包1b 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY696e7365727420696e746f2074312076616c7565732832323229 # insert into t1 values(222)server端返回的數據包:response14 00 00 # playload_length01 # sequence_id00010003400000000b05090854 5f 5f 5f 57 5f 5f 5f # 事務狀態信息 T___W___# Place 1: 5f //沒有活躍的事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 5f //當前事務中沒有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表客戶端執行commit;封裝的數據包07 00 00 # playload_length00 # sequence_id03 # command_type COM_QUERY636f6d6d6974 # commitserver端返回的數據包:response17 00 00 # playload_length01 # sequence_id00000002400000000e050908 5f 5f 5f 5f 5f 5f 5f 5f # 事務狀態信息 ________040100# Place 1: 5f //沒有活躍的事務# Place 2: 5f //當前事務中沒有讀取非事務性存儲引擎的表# Place 3: 5f //當前事務中沒有讀取事務性存儲引擎的表# Place 4: 5f //當前事務中沒有寫入非事務性存儲引擎的表# Place 5: 5f //當前事務中沒有寫入事務性存儲引擎的表# Place 6: 5f //當前事務中沒有使用不安全的語句# Place 7: 5f //沒有結果集# Place 8: 5f //沒有鎖表

3. 總結

在設置session_track_transaction_info參數之后,在MySQL的返回數據包中可以獲取到當前連接的事務狀態信息。

在數據庫中間件上,利用這一特性,使得MySQL故障的情況下,能夠自動遷移連接,減少對用戶影響。

在部分場景下能夠達到底層MySQL節點故障切換了,對應用來說可以無感知的切換過去。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品黄色网| 亚洲成人a级网| 日韩国产欧美精品在线| 国产成人精品久久二区二区| 亚洲欧洲自拍偷拍| 亚洲人午夜精品免费| 久久夜精品va视频免费观看| xxxx欧美18另类的高清| 69久久夜色精品国产7777| 91久久夜色精品国产网站| 亚洲成人网在线| 成人av番号网| 国产精品免费久久久久久| 日韩欧美精品网站| 欧美在线性爱视频| 性色av香蕉一区二区| 国产精品中文久久久久久久| 久久久国产精品一区| 欧美裸体视频网站| 日韩中文av在线| 91亚洲精品久久久久久久久久久久| 亚洲电影免费观看高清完整版在线观看| 日韩av在线网页| 中文字幕av一区中文字幕天堂| 欧美激情欧美激情| 91av成人在线| 久久成人免费视频| 亚洲午夜久久久久久久| 中文字幕亚洲综合| 九九热最新视频//这里只有精品| 日本精品视频网站| 久久影院在线观看| 欧美激情二区三区| 中文字幕亚洲一区二区三区| 国产一区二区久久精品| 一区二区三区国产视频| 日韩av中文字幕在线播放| 91亚洲精品在线观看| 久久综合久中文字幕青草| 欧美乱妇40p| 久久99精品视频一区97| 久久精品免费播放| 欧美乱妇高清无乱码| 欧美第一黄网免费网站| 在线播放精品一区二区三区| 国产免费亚洲高清| 午夜精品一区二区三区视频免费看| 国产精品久久久久久亚洲影视| 国产一区二区在线播放| 国产成+人+综合+亚洲欧美丁香花| 欧美日韩国产中文字幕| 国产精品亚洲自拍| 夜夜躁日日躁狠狠久久88av| 91免费看片网站| 亚洲天堂男人天堂| 久久手机精品视频| 亚洲国产精品大全| 亚洲人成网站999久久久综合| 国产欧美一区二区白浆黑人| 国产精品成人在线| 国产ts人妖一区二区三区| 国产精品视频久久久| 国产精品女人久久久久久| 精品成人在线视频| 国产欧美va欧美va香蕉在| 国产精品成久久久久三级| 欧美精品做受xxx性少妇| 国产成人精品亚洲精品| 91国内在线视频| 久久精品成人动漫| 亚洲精品国产综合区久久久久久久| 久久免费国产视频| 国产精品av网站| 日韩综合视频在线观看| 一区二区欧美在线| 亚洲国模精品私拍| 欧美亚洲第一区| 久久久免费高清电视剧观看| 欧美日韩亚洲精品一区二区三区| 91精品久久久久久久久久入口| 国产精品欧美日韩| 国产一区二区美女视频| 欧美日韩亚洲一区二区三区| 久久久视频在线| 国产精品成人一区| 久久噜噜噜精品国产亚洲综合| 久久久亚洲精品视频| 日韩中文字幕在线精品| 国产精品美女视频网站| 亚洲一区二区三区乱码aⅴ| 精品国产一区二区三区在线观看| 成人免费直播live| www.日本久久久久com.| 精品久久久久久久中文字幕| 丝袜美腿亚洲一区二区| 精品视频在线观看日韩| 欧美在线精品免播放器视频| 中文字幕亚洲专区| 亚洲一区二区三区视频播放| 亚洲精品按摩视频| 尤物九九久久国产精品的特点| 国产69精品久久久久99| 亚洲欧美一区二区激情| 亚洲精品动漫100p| 91香蕉嫩草神马影院在线观看| 亚洲免费视频在线观看| 亚洲天堂免费在线| 97国产在线观看| 亚洲欧美激情另类校园| 国产精品欧美日韩久久| 91香蕉嫩草影院入口| 亚洲系列中文字幕| 亚洲色图校园春色| 久久不射电影网| 日韩成人激情影院| 欧美男插女视频| 性日韩欧美在线视频| www.欧美三级电影.com| 日韩在线观看视频免费| 亚洲欧美精品在线| 亚洲国产精品悠悠久久琪琪| 国产精品日韩一区| 国产精品久久色| 日韩一区二区三区xxxx| 久久大大胆人体| 亚洲а∨天堂久久精品9966| 在线观看国产精品淫| 97视频在线观看视频免费视频| 国产精品久久av| 欧美激情视频在线免费观看 欧美视频免费一| 不卡毛片在线看| 最近中文字幕日韩精品| 一区二区国产精品视频| 国产在线98福利播放视频| 色yeye香蕉凹凸一区二区av| 亚洲一区中文字幕在线观看| 欧美成人免费va影院高清| 2019中文字幕在线免费观看| 欧美精品一区在线播放| 国产视频精品自拍| 久久久久国色av免费观看性色| 91国产在线精品| 亚洲精品之草原avav久久| 中文字幕在线看视频国产欧美在线看完整| 国产一区二区三区在线播放免费观看| 97香蕉久久夜色精品国产| 日韩精品中文在线观看| 欧美成人亚洲成人日韩成人| 国产成人免费91av在线| 97精品一区二区三区| 精品久久久久久国产91| 日本乱人伦a精品| 97精品在线视频| 国产精品久久不能| 国产精品毛片a∨一区二区三区|国| 97视频在线观看播放| 精品久久久中文| 欧美激情一区二区久久久| 欧美最顶级的aⅴ艳星| 久久精品精品电影网| 97av视频在线| 91在线观看免费观看| 久久久久999| 91社影院在线观看|