91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

京東智聯云MySQL數據庫如何保障數據的可靠性

發布時間:2021-10-25 10:41:07 來源:億速云 閱讀:155 作者:柒染 欄目:大數據

京東智聯云MySQL數據庫如何保障數據的可靠性,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

MySQL作為當前最流行的關系型數據庫,在各個行業的系統中扮演著最重要的角色。隨著大家對數據價值認可的逐步加深,數據的可靠性是最常被問到的一個問題。MySQL是如何保證數據可靠性的?京東智聯云RDS-MySQL又做了哪些優化和新特性來保證用戶數據的可靠性和一致性?本篇文章將為大家一一揭秘。

京東智聯云MySQL數據庫如何保障數據的可靠性

MySQL的Innodb存儲引擎支持ACID(原子性Atomicity,一致性Consistency,隔離性Isolation,持久性Durability)特性,正是因為保證了一致性和持久性,所以數據才是可靠的。很多關系型數據庫為保障數據庫的可靠性,同時最大限度地提升性能,采用了預寫日志(Write-Ahead Logging)的方法,MySQL也不例外。它將數據變化先寫入日志,然后立刻返回給客戶端更新成功,真正的數據再異步更新到磁盤的數據文件。如果中間系統發生故障,只要日志在數據就不會丟失,這就保證了數據的可靠性。

MySQL寫入的日志就是binlog和redo log文件,下面我們來介紹下兩種日志的寫入流程。

京東智聯云MySQL數據庫如何保障數據的可靠性

事務執行過程中,MySQL會將所有變更記錄到binlog cache中,在事務commit的時候一起寫入binlog文件中。

binlog cache是由參數binlog_cache_size控制,默認32KB,如果事務很大,變更內容超過了binlog cache,則會寫到磁盤中。通過命令show global status like 'Binlog_cache_disk_use';可以查看binlog cache寫入磁盤的次數,如果數量過多,建議調大binlog_cache_size參數值。

每個線程都會分配binlog cache,但是都共用一份binlog文件。流程圖如下:

京東智聯云MySQL數據庫如何保障數據的可靠性

在寫入到系統的日志文件中有兩個步驟,write和fsync。wirte是寫入操作系統的緩存,fsync是持久化到磁盤文件,這個操作會占用系統的IOPS,而它們操作的時機是通過參數sync_binlog控制。

  • sync_binlog=0,事務提交時,只做write操作,由操作系統自己控制fsync操作。這個是最危險的,一旦操作系統宕機,binlog cache中的變更內容全部會丟失。

  • sync_binlog=1,事務提交時,都會做write和fsync操作。安全性最高,但是性能損耗也是最大的。

  • sync_binlog=N,事務提交時,會做write操作,累積N個事務時做fsync操作。一旦操作系統宕機,會丟失binlog cache中部分變更內容。

京東智聯云MySQL數據庫如何保障數據的可靠性

事務執行過程中,也是先寫入內存redo log buffer中,然后再寫入到磁盤文件。其中redo log buffer是所有線程共用的。與binlog寫到文件一樣,寫redo log也有write和fsync兩個操作,它們操作的實際是通過參數innodb_flush_log_at_trx_commit控制。

  • nnodb_flush_log_at_trx_commit=0,事務提交時,只將變更內容寫到redo log buffer,由后臺Master線程每秒write和fsync到磁盤文件。

  • innodb_flush_log_at_trx_commit=1,事務提交時,執行write和fsync操作。這是最安全的配置。

  • innodb_flush_log_at_trx_commit=2,事務提交時,只執行write操作,即只寫到操作系統的緩存中,由后臺Master線程每秒fsync到磁盤文件。

關于這個參數與數據可靠性之間的關系如下表所示:

innodb_flush_log_at_trx_commit

數據庫進程異常

操作系統異常

0

丟失最多1s的數據

丟失最多1s的數據

1

不丟數據

不丟數據

2

不丟數據

丟失最多1s的數據

參數sync_binlog=1與innodb_flush_log_at_trx_commit=1就是DBA常說的“雙1”配置,也是線上環境數據最安全最可靠的配置。

再對比下binlog和redo log的不同之處:

 

binlog

redo log

記錄

MySQL server

Innodb引擎

記錄時間

事務commit的時候

多種條件觸發,隨時記錄

記錄內容

邏輯日志

row格式或者statement格式

物理日志

數據頁的變化,冪等的


京東智聯云MySQL數據庫如何保障數據的可靠性

binlog和redo log是如何配合起到數據可靠性的作用呢,就不得不提到兩階段提交。它可以保證binlog和redo log的數據一致性。下圖是事務提交時兩個日志的記錄流程:

京東智聯云MySQL數據庫如何保障數據的可靠性

如果在此過程中出現系統異常,每個狀態下都是可以保證數據一致性的。

狀態

處理

如果innodb已經commit,那binlog一定有該事務的event。

事務是一致性的,無需處理。

如果innodb已經prepare,binlog已經有記錄該事務的event,但是innodb未commit。

前滾,innodb需要繼續提交這些事務。

如果innodb已經preprare,binlog沒有記錄event,說明從庫也沒有復制這些event。

回滾。

如果innodb未完成prepare,binlog也應該沒有記錄event。

回滾。

innodb_suport_xa參數,這個參數控制是否打開兩段式提交。默認開啟,如果關閉了,事務則會以不同順序的方式寫入binlog。如果宕機恢復、xtarbackup恢復,都是會有數據不一致的風險。這個參數在MySQL5.7.10后就廢棄了,必須開啟。

京東智聯云MySQL數據庫如何保障數據的可靠性

MySQL發展到現在,集群也從主備異步復制、半同步復制、group replication不斷發展和演變。但是它們的核心基礎都是binlog,可以說MySQL的數據復制都依賴于它,而集群間的數據一致性更是與binlog有關。主要有兩個點需要特別注意。

1. binlog的格式。statement、row和mixed。statement格式直接將SQL語句記錄在binlog文件中,因為主從庫是兩個獨立的服務,運行環境完全不同,所以會出現不一致的風險,比如執行delete from t limit 100。所以線上環境建議使用row格式。

2. 數據延遲。當從庫出現延遲,會造成集群數據不一致。從庫延遲的原因很多,這里列舉以下幾個線上經常出現的延遲原因:

a)大事務。binlog只有在事務commit時才會記錄到文件,然后從庫才能讀取到數據變更,所以當有大事務的時候,主庫提交后從庫才開始執行。

b)大并發。5.6和5.7版本都支持并行復制,但是并行度有限,當主庫并發較高時,從庫會出現延遲。

c)表結構。主庫表沒有主鍵,binlog是row格式的,主庫執大量行數的更新SQL時,從庫會執行多次全表掃描,造成延遲。

d)等待鎖。從庫一般會承擔備份功能,使用xtrabackup進行備份會執行FLUSH NO_WRITE_TO_BINLOG TABLES和FLUSH TABLES WITH READ LOCK操作,在特殊情況下,這兩個操作會堵塞復制的SQL線程,造成延遲。

京東智聯云MySQL數據庫如何保障數據的可靠性

京東智聯云RDS-MySQL集群使用主從復制架構,為了保證用戶存儲數據可靠性和安全性,我們對關鍵流程做了一系列優化和改善工作。以用戶數據安全為己任,以用戶體驗為中心。

京東智聯云MySQL數據庫如何保障數據的可靠性

1. 物理環境

  • 硬件,采用高性能的NVME硬盤,最新型號物理機配置。

  • 網絡,跨AZ機器的網絡延遲在1.2ms以內,配置萬兆網卡。

2. 軟件環境

  • 數據面,參考京東高并發、高可靠的業務系統優化經驗,京東智聯云對RDS操作系統配置、MySQL參數配置做了一些列優化,保證數據庫集群數據的可靠性。

  • 控制面,針對集群的延遲,有多組延遲監控、報警;針對不同延遲原因,會觸發不同的優化邏輯,自動降低延遲。

京東智聯云MySQL數據庫如何保障數據的可靠性

當物理機出現問題或者做數據遷移時,都會涉及MySQL集群的高可用操作,因為MySQL集群的復制特點,有可能會出現數據丟失的情況。京東智聯云RDS-MySQL在切換時是要保證用戶數據一致性優先的,在判斷集群數據完全可靠的情況下,再做切換操作,保證用戶的數據不丟失,不寫花。

京東智聯云MySQL數據庫如何保障數據的可靠性

MySQL高可用切換流程的復雜性,不在切換的過程,而是觸發切換條件的判斷,下面介紹下RDS-MySQL自動高可用切換的判斷流程。

  1. 哨兵服務檢查數據庫和操作系統狀態,發現實例服務異常,則觸發多組哨兵服務的數據庫服務檢查和投票機制,確認服務真實不可用再進行切換流程。

  2. 主庫實時上報GTID信息,如果發生自動高可用,即主庫服務不可用時,首先會對比從庫的Retrieved_Gtid_Set值,確保從庫的IO thread已經拉取了主庫全部的binlog內容。

  3. 然后再對比從庫的Retrieved_Gtid_Set和Executed_Gtid_Set范圍值,保證從庫拉取的binlog全部應用完成。

高可用流程切換完成后,會對集群數據做一致性校驗,并觸發建立新從庫的流程。

京東智聯云MySQL數據庫如何保障數據的可靠性

數據庫備份是數據安全的最重要屏障,當出現極端情況下,集群所有節點的數據都不可用,就需要依賴備份保證數據的可靠性和安全性。我們對RDS-MySQL的備份、恢復流程做了一系列優化,保證用戶系統在災備時恢復時間盡量短,恢復數據盡可能最新。

  1. 每日全量備份,實時binlog備份;

  2. 所有備份上傳到對象存儲,多備份保存,多區域存放;

  3. 定期做備份數據的有效性驗證;

  4. 高可用、擴容、刪除等重要流程強制做數據庫的數據備份;

  5. 支持軟刪除功能,單庫表恢復功能。

京東智聯云MySQL數據庫如何保障數據的可靠性

京東智聯云RDS-MySQL的用戶在使用過程中,出現過很多數據可靠性相關的案例,下面舉一些典型案例來分享:

京東智聯云MySQL數據庫如何保障數據的可靠性

問題

用戶因為人為誤操作,導致刪除了線上系統的部分數據。

發現

用戶提工單,想快速恢復刪除表的數據到指定時間點。

解決

控制臺提供單庫、單表按時間點快速恢復的功能。技術服務人員直接反饋給用戶該功能的使用文檔。用戶通過自助操作,完成對刪除數據的恢復操作。

意義

RDS-MySQL將備份和恢復功能用到極致,兩類備份方式對應多種恢復流程,方便用戶快速、安全地實現恢復數據庫需求。

RDS-MySQL恢復流程支持:

1. 根據時間點創建

2. 根據時間點單庫、單表本地恢復

3. 根據備份創建和本地覆蓋恢復

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会同县| 长阳| 定远县| 福泉市| 四平市| 睢宁县| 南溪县| 漾濞| 夏津县| 余庆县| 海淀区| 大新县| 图片| 乌审旗| 五莲县| 巧家县| 临夏县| 青河县| 贡山| 新龙县| 布拖县| 康定县| 临澧县| 海丰县| 盐源县| 台中市| 长武县| 博客| 天气| 祁连县| 禹城市| 观塘区| 雷山县| 威远县| 共和县| 兴安盟| 大连市| 乐昌市| 鸡西市| 鹤壁市| 绵竹市|