成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TiDB用什么保證備份的一致性?

數據庫 MySQL
作為一名MySQL DBA,就應該了解MySQL備份無論是邏輯備份還是物理備份,都會使用FLUSH TABLES WITH READ LOCK(下面簡稱FTWRL)鎖來保證數據庫備份的一致性。

背景

作為一名MySQL DBA,就應該了解MySQL備份無論是邏輯備份還是物理備份,都會使用FLUSH TABLES WITH READ LOCK(下面簡稱FTWRL)鎖來保證數據庫備份的一致性。

描述FTWRL鎖對一致性的影響

先拿,MySQL邏輯備份MySQLDump舉例。

MySQLDump,為了保證備份一致性,需要添加2個參數       

--single-transaction  --master-data=2 。

在開啟--single-transaction后,MySQLDump的備份流程大概就是,在MySQL中會執行如下操作。

1、刷新表flush tables 用來防止DDL操作。

2、執行FTWRL鎖,這個時候整個數據庫整體被鎖住,讓數據庫處于一個一致性的狀態。

3、設置當前session(回話)事務的隔離級別為RR。

4、記錄當前的MySQLbinlog的位置,或者GTID信息。

5、解鎖。#從加鎖到解鎖執行速度會很快,前提是沒有鎖沖突,如果有鎖沖突,就會到鎖等待的一個狀態。

物理備份xtrabackup,物理備份執行FTWRL鎖的時間相對較長,下面來看一下xtrabackup對FTWRL鎖的流程。

  •  執行FTWRL鎖。
  •  拷貝frm、MYD、MYI、etc拷貝。
  •  等待redo的拷貝完成。
  •  記錄當前的MySQLbinlog的位置,或者GTID信息。
  •  解鎖。

xtrabackup加鎖是為了保證在數據庫中如果有MyiSAM表,盡量保證MyiSAM表的備份一致性。

#之前有個同學說。物理備份加FTWRL鎖會比邏輯備份加鎖時間短,這個結論其實是錯誤的。物理備份加鎖的時間完全取決一下當前數據庫里有沒有MyiSAM表,MyiSAM表的大小。

TiDB是用什么保證數據庫一致性的

先說TiDB官方推薦的邏輯備份mydumper, 一開始我以為mydumper也是用FTWRL鎖來保證備份的一致性。結果我今天在看文檔的時候發現,這個結論是錯誤的。

官方對mydumper進行了優化和修改。先看一下官方的描述。下面內容來自TiDB官方文檔。

1、對于 TiDB 可以設置 tidb_snapshot 的值指定備份數據的時間點,從而保證備份的一致性,而不是通過 FLUSH TABLES WITH READ LOCK 來保證備份一致性。

2、使用 TiDB 的隱藏列 _tidb_rowid 優化了單表內數據的并發導出性能。

大家先記住 TiDB 是通過 tidb_snapshot,來實現備份,而不是FTWRL鎖來保證。這么設計會有什么問題?能保證數據備份的一致性嗎?

要解答這個問題,要簡單說一下TiDB的架構設計。

TiDB的存儲節點是TiKV,下面主要針對TiKV來說。先把TiKV,理解為很大的一個Key-value的存儲器。

(圖1選自TiDB官方文檔)

這塊跟備份其實沒有什么關系,先讓大家大概了解一下TiKV存什么。

下面的內容就跟備份有關系了,TiDB 的MVCC(多版本控制器)實現是在TiKV中。TiKV中加了MVCC,key和value這樣的。

我認為version就是TSO(全局唯一遞增時間戳),我是通過TiDB二階段提交中發現的。

如果不是的話version的版本信息就會存在PD里面,這樣設計的話會增加PD的壓力,感覺不現實。

針對上面描述有一個小的結論TiKV里面會存儲歷史key的信息。

下面還是來一個問答來解答上面的疑問。

問:TiDB是通過什么來保證數據的一致性的?

答:是基于TiKV里面的MVCC來保證的,根據當前的的時間戳信息,來下發命令  

  1. sql="SET SESSION tidb_snapshot = '415599012634951683'"。 

這個session就會讀到這個時間點的歷史版本的數據。

下一步的操作,只要把所有的表和里面的數據掃出來就可以了。

問:通過MVCC實現的備份,能達到一致性嗎?(因為沒有鎖)

答:是可以的,大家可以看一下我之前寫的《淺析TiDB二階段提交》那篇文章中里面有寫到,只有事務成功提交才能會寫入到TiKV中,才會有TSO(全局唯一遞增時間戳)。也就是TiKV中里面的key都是成功提交的。

那么在備份的過程中提交的成功的事務是不會被掃到的。

因為備份過程中提交的事務的tso(全局唯一遞增時間戳)會大于當前的備份發起的tso(全局唯一遞增時間戳)。

問: 使用了MVCC的備份方式,會有哪些問題?

答:我認為最大的問題就是 在備份的過程中老的key被GC(垃圾清理)掉,解決這個問題的最好的辦法,可以把GC(垃圾清理)時間設置的長一點。 

  1. UPDATE mysql.tidb SET VARIABLE_VALUE = '800h' WHERE VARIABLE_NAME = 'tikv_gc_life_time'

可以設置為800h(根據時間情況而定),備份結束后要修改回來,否則會浪費存儲空間。

通過上面的描述,大家應該會了解到TiDB對備份的一致性處理的相關細節。

在TiDB4.0的分布式備份恢復工具br,在這塊處理是類似的。也是利用MVCC的方式來實現的。

最后在安利一下TiDB4.0的備份工具br。備份的速度快,消耗資源相對較低。下面的案例僅供參考大家感興趣的話 我可以做一下詳細的測試,留言刷起來。

機器描述:三臺騰訊云4C8G SSD50G,Sysbench 壓力10張表每張表1千萬條數據。

整體大概5分鐘左右,brlog里面會記錄相關信息。

開始時間16:44:27.009 結束時間16:49:40.395

相同環境我用mydumper測,mydumper運行在tidb的節點上。

mydumper是4個線程數(默認線程數)

他備份的過程中把tidb壓的OOM了。

#可以用-r參數控制每個并發處理的數據量來避免。

大概是我的機器配置低,而且mydumper和tidb-server是同一臺機器,這塊只是給大家提供一個參考。這塊我在后續測一下吧,會有一個完整的測試例子,目前備份工具還是推薦mydumper。 

 

責任編輯:龐桂玉 來源: 老葉茶館
相關推薦

2022-04-06 15:19:32

數據庫MySQL一致性

2022-10-19 12:22:53

并發扣款一致性

2019-08-30 12:46:10

并發扣款查詢SQL

2020-08-05 08:46:10

NFS網絡文件系統

2025-03-27 08:20:54

2019-10-16 00:06:08

CPU內存存儲

2024-01-10 08:01:55

高并發場景悲觀鎖

2024-12-26 15:01:29

2025-03-05 09:10:00

session開發Web

2021-03-04 06:49:53

RocketMQ事務

2023-09-07 08:11:24

Redis管道機制

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2017-06-27 09:40:28

MYSQL數據備份

2021-07-21 15:50:42

Serverless 業務部署

2021-12-14 07:15:57

MySQLRedis數據

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2024-10-28 12:41:25

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2024-10-16 09:53:07

2022-03-29 10:39:10

緩存數據庫數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丝袜久久| 精品久久精品 | 欧美成人一区二区三区片免费 | 亚洲+变态+欧美+另类+精品 | av网站免费观看 | 国产精品亚洲二区 | 成人免费视频观看视频 | 午夜影院视频在线观看 | 亚洲视频在线观看 | 成人a免费 | 亚洲一区综合 | 免费看一区二区三区 | 99伊人 | 久久久噜噜噜久久中文字幕色伊伊 | 精品国产青草久久久久96 | 91精品久久久久久久久中文字幕 | 喷潮网站 | www.天天操.com| 国产日屁 | av香蕉| 精品国产不卡一区二区三区 | 亚洲视频在线观看免费 | 日本在线网址 | 99精品在线观看 | 91国产精品 | 亚洲毛片在线观看 | 国产精品1区2区3区 国产在线观看一区 | 午夜电影福利 | 国产精品久久亚洲 | 精品免费视频 | 亚洲三级在线观看 | 欧美激情精品久久久久久免费 | 国产1区2区3区 | 韩日免费视频 | 91精品国产综合久久小仙女图片 | 黄色一级毛片 | 精品国产99| 日韩播放| 亚洲精品一区二区三区中文字幕 | 欧美黄 片免费观看 | 99日韩|