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

一張思維導圖縱觀MySQL數(shù)據(jù)安全體系

數(shù)據(jù)庫 MySQL
和團隊內部的同事一起溝通,討論了MySQL數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)安全性問題,主要針對MySQL丟數(shù)據(jù) 、主從不一致的場景 ,還有業(yè)務層面使用不得當導致主備庫數(shù)據(jù)結構不一樣的情況,本文是基于以上的討論和總結做的思維導圖。

[[195946]]

簡介

和團隊內部的同事一起溝通,討論了MySQL數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)安全性問題,主要針對MySQL丟數(shù)據(jù) 、主從不一致的場景 ,還有業(yè)務層面使用不得當導致主備庫數(shù)據(jù)結構不一樣的情況,本文是基于以上的討論和總結做的思維導圖。

思維導圖

內容展示

OS

  • BBU:數(shù)據(jù)庫服務器要配置BBU,BBU在電源供應出現(xiàn)問題的時候,為RAID控制器緩存提供電源。當電源斷電時,BBU電力可以使控制器內緩存中的數(shù)據(jù)可以保存一定時間(根據(jù)BBU的型號而決定)。用戶只需要在BBU電力耗盡之前恢復正常供電,緩存中的數(shù)據(jù)即可被完整的寫回RAID中,避免斷電導致數(shù)據(jù)丟失
  • 防止OS異常斷電導致數(shù)據(jù)無法正常落盤
  • 磁盤禁用cache,MySQL的 O_DIRECT 方式可以跳過pagecache寫數(shù)據(jù)

單機

(1)redo log

innodb_flush_log_at_timeout

< 5.6.6: 每隔一秒將redo log buffer中的數(shù)據(jù)刷新到磁盤

>= 5.6.6:每隔innodb_flush_log_at_timeout秒將數(shù)據(jù)刷新到磁盤中去

(2)binlog

sync_binlog =1

(3)innodb buffer data

不同的flush mathod刷數(shù)據(jù)的圖形展示。圖片來自hatemysql.com。

(4)InnoDB 落盤

MySQL數(shù)據(jù)落盤的路徑,圖片來自李春hatemysql.com。

主從不一致

  • 主庫insert之后再回滾 ,主備庫自增主鍵不一致
  • 使用replace into操作,導致主備庫自增主鍵不一致
  • set session sql_log_bin=0

業(yè)務架構

常見的雙寫

“丟”數(shù)據(jù)的場景

(1)slave_skip_counter 不合理

  1. slave_skip_counter =1 
  2. slave_skip_counter >1 

(2)DB Crash,OS正常

  1. innodb_flush_log_at_trx_commit=0 

事務提交時,不刷新緩存,系統(tǒng)刷新的頻率是1s,故會丟失1s的數(shù)據(jù)。

  1. innodb_flush_log_at_trx_commit=1 

事務提交時,會刷新到磁盤,保證事務落盤,故不丟數(shù)據(jù)。

  1. innodb_flush_log_at_trx_commit=2 

事務提交時,刷新到os cache,系統(tǒng)沒有crash,數(shù)據(jù)無丟失。

(3)DB正常,OS Crash

帶有 BBU

  1. innodb_flush_log_at_trx_commit=0 

事務提交時,不刷新緩存,系統(tǒng)刷新的頻率是1s,故會丟失1s的數(shù)據(jù)。

  1. innodb_flush_log_at_trx_commit=1 

事務提交時,會刷新到磁盤,保證事務落盤,故不丟數(shù)據(jù)。

  1. innodb_flush_log_at_trx_commit=2 

事務提交時,刷新到os cache,系統(tǒng)沒有crash,數(shù)據(jù)無丟失。

(4)slave非實時寫redo和binlog丟失數(shù)據(jù)

在slave機器上會存在三個文件來保證事件的正確重放:relay log、 relay log info、 master info。

(5)異步模式

事務T1寫入binlog buffer;

dumper線程通知slave有新的事務T1;

binlog buffer進行checkpoint;

slave因為網(wǎng)絡不穩(wěn)定,一直沒有收到t1;master掛掉,slave提升為新的master,t1丟失。

(6)semi sysnc

after_commit

比如主庫操作update t1 set val=1 where id=10將val從5修改為1 。

  1. 會話session1在主庫提交update t1 set val=1 where id=10 ;commit;
  2. 主庫根據(jù)二階段提交將數(shù)據(jù)持久化到innodb和提交日志binlog;
  3. 同步日志到slave ,并等待slave 返回ack信息,等待的實際時間以 rpl_semi_sync_master_timeout 為準,超過該設置時間則超時,主庫返回給客戶端成功寫入信息。
  4. 接收到來自slave的ack信息,返回成功給OK客戶端。

分析:

  • 第四步之前,master還未收到slave的ack信息,此時由于事務已經(jīng)提交,除了session1,其他會話是可以看到 val=1。
  • 主庫服務器down或者主庫實例crash,此時發(fā)生HA切換。
  • 主庫未接收到slave的ack信息,slave接收到日志并落盤,應用binlog更新。t1.val=1,此時業(yè)務切換到slave上能獲取到一致的數(shù)據(jù)。
  • 如果在slave還未接收到binlog并且主庫掛了,因為主庫已經(jīng)提交,此時主庫t1.val是1而從庫t1.val是5,主備不一致。

after_sync

比如主庫操作update t1 set val=1 where id=10將val從5修改為1。

  1. 會話session1在主庫提交 :update t1 set val=1 where id=10;commit;
  2. 主庫將事務寫入binlog。
  3. 將binlog同步給slave,不提交。
  4. 等待slave返回ack信息,等待的實際時間以rpl_semi_sync_master_timeout為準,如果超時master改為異步模式。
  5. 接收到來自slave的ack信息,主庫進行提交并且返回成功給OK客戶端。

分析:

  • 如果在第3步等待slave ack的過程中,主庫發(fā)生crash(此時t1.val=5),HA 切換到slave,應用查詢slave 。如果slave接收到binlog并發(fā)送ack給master,則t1.val=1。
  • 如果slave響應主庫,但是主庫crash ,此時因為主庫還沒提交t1.val=1, slave t1.val=5,但是主庫啟動恢復之后t1.val會變成5,主備還是一致的。
  • 如果slave未接收到事務和響應主庫,此時t1.val=5,無論哪種狀態(tài),對于所有客戶端數(shù)據(jù)庫都是一致,事務都沒有丟失。

知識點:兩階段提交

***階段是先prepare、再同步寫redo log,第二階段同步寫binlog、再commit,如果在寫入commit標志時崩潰,則恢復時,會重新對commit標志進行寫入。

HA切換

(6)主從

binlog_format

ROW(最安全)

MIXED(不推薦)

STATEMENT(不推薦)

sync_binlog

=0:由os系統(tǒng)的刷新機制來控制,刷新數(shù)據(jù)到磁盤的頻率

=1:每次commit刷新到磁盤

>1:每N次提交刷新到磁盤

innodb_support_xa

版本要打開,保證binlog提交的順序,否則亂序的binlog在恢復或者slave應用的時候會有問題,及以后廢棄,始終支持兩階段提交。

crash safe

crash-safe就是將relay-info.log的信息保存在InnoDB的事務表中,這時執(zhí)行relay log中的事務和寫relay info在一個事務中,就能得到原子性保證。從而避免已執(zhí)行的binlog位點和寫入relay log info的位點信息不一致的情況發(fā)生。

IO thread

master-info-repository=TABLE

sync_master_info=N:每N個event刷新一次表

SQL thread

relay-log-info-repository=TABLE

sync_relay_info=N:每N個event刷新一次表

relay-log-recovery

當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執(zhí)行的relay-log,并且重新從master上獲取日志,這樣就保證了relay-log的完整性。

relay_log_info_repository = TABLE

relay_log_recovery = 1

http://mysqlserverteam.com/relay-log-recovery-when-sql-threads-position-is-unavailable/

semi_sync

  • after commit:master把每一個事務寫到二進制日志并保存到磁盤上,并且提交(commit)事務,再把事務發(fā)送給從庫,開始等待slave的應答。響應后master返回結果給客戶端,客戶端才可繼續(xù)。
  • after sync:master把每一個事務寫到二進制日志并保存磁盤上,并且把事務發(fā)送給從庫,開始等待slave的應答。確認slave響應后,再提交(commit)事務到存儲引擎,并返回結果給客戶端,客戶端才可繼續(xù)。

GTID

相比位點復制,能減少不一致的概率

責任編輯:武曉燕 來源: 運維派
相關推薦

2019-11-20 10:43:32

監(jiān)控系統(tǒng)技術工具

2017-10-16 12:56:16

正則表達式思維導圖

2019-07-01 12:55:05

安全體系架構網(wǎng)絡安全企業(yè)安全

2021-02-07 09:01:10

Java并發(fā)編程

2016-05-03 13:00:00

2019-08-27 09:40:55

Python編程思維導圖

2011-10-14 11:18:14

數(shù)據(jù)安全

2021-09-29 11:30:01

大數(shù)據(jù)技術架構

2015-09-23 10:04:03

開放數(shù)據(jù)

2015-10-29 15:09:32

信息圖數(shù)據(jù)

2019-09-23 11:29:21

mysql數(shù)據(jù)庫開發(fā)

2009-12-09 09:49:29

ibmdwWebSphere

2019-09-11 10:12:12

華為

2015-03-10 10:15:27

AppleWatch開發(fā)Swift

2025-01-08 10:30:24

2020-08-18 08:11:08

安全體系化建設漏洞網(wǎng)絡安全

2012-12-25 14:23:10

2013-02-28 10:15:15

2017-01-20 15:37:06

2015-09-14 09:07:15

Java多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产美女网站 | 日韩国产一区二区三区 | 黄色男女网站 | 中文字幕一区二区视频 | 久久久久久亚洲欧洲 | 成人午夜免费网站 | 中文字幕国产视频 | 精品一区二区观看 | 日韩影音 | 亚洲首页 | 97caoporn国产免费人人 | 国产www. | 视频三区 | 在线观看中文字幕亚洲 | 黄色一级电影免费观看 | 欧美激情精品久久久久 | 日韩一区二区av | 成人精品一区二区 | 韩国理论电影在线 | 在线观看成人小视频 | 在线观看av不卡 | 亚洲视频精品 | 日韩伦理一区二区 | 色噜噜色综合 | 精品成人佐山爱一区二区 | 精品国产乱码久久久久久1区2区 | 99久久久无码国产精品 | 国产精品福利网 | 日韩久久久久 | 久久久久九九九女人毛片 | 精品国产91乱码一区二区三区 | 亚洲资源站 | 欧美 日韩 中文 | 国产精品一区二区视频 | 国产成在线观看免费视频 | 国产日韩视频 | www久久99| 欧美2区| 爱爱视频日本 | 亚洲福利在线观看 | 亚洲成av人片在线观看 |