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

圖解MySQL邏輯備份的實現流程

數據庫
本文將通過圖文方式 對常見的邏輯備份工具 的 一致性備份 流程進行說明,來進一步了解邏輯備份的整個流程是怎么實現的。

1. 摘要

數據作為一家公司的重要資產,其重要程度不言而喻。數據庫為數據提供存取服務,擔任著重要的角色,如果因 數據 誤刪、服務器故障、病毒入侵等原因導致數據丟失或服務不可用,會對公司造成重大損失,所以數據庫備份是數據系統中最為重要的一環。

MySQL備份按照類型分為 邏輯備份、物理備份、快照備份 ,本文將 通過 圖文方式 對常見的邏輯備份 工具 的 一致性備份 流程進行說明,來進一步了解邏輯備份的整個流程是怎么實現的。

2. 概念

邏輯備份是數據庫對象級的備份,其將數據庫里的對象通過SQL查詢出來并轉儲到文件中, 包含了用于創建轉儲對象(數據庫,表,觸發器、自定義函數、存儲過程等)的CREATE語句,和用于將數據加載到表中的INSERT語句。

一致性備份 是指在某個時間點,導出的數據與導出的備份文件信息匹配,如果導出了多張表的數據,這些不同表之間的數據都是同一個時間點的數據,MySQL可以通過全局鎖(FTWRL,鎖表備份)和事務( single -trans ac tion, 一致性快 照 )實現。

鎖表備份在Server層實現,備份期間該實例只能進行SELECT操作;事務的 一致性快照備份在引擎層實現,支持MVCC引擎表 (InnoDB) 的備份,期間實例可以對任何表進行 DML 操作,DDL操作需要根據具體情況分析,本文會對該情況(一致性快照備份)進行說明。

常見的邏輯備份工具 : MySQL官方的 mysqldump、 mysqlpump、 mysqlshell 的dump方法和第三方開源的 mydumper 。

3. 工具說明

3.1 mysqldump

說明

mysqldump 使用 單線程 對表進行SELECT查詢并轉儲到文件來達到備份的目的,作為MySQL最“古老 ” 的備份工具,被廣泛的使用在備份中。

  • 備份命令
mysqldump -udump_user -p -P3306 -h127.0.0.1 --master-data=2 --single-transaction --default-character-set=utf8 --all-databases --triggers --routines --events > all.sql
  • 備份流程

開啟 general_log 查看備份流程,大致的備份流程如下圖所示:

流程說明:

1. 連接數據庫,設置當前變量,刷臟頁并加一個全局讀鎖,此刻數據庫實例只能SELECT,不能執行其他任何類型的操作(會影響到業務),再設置事務隔離級別和開啟一致性快照,并獲取BINLOG和GITD信息,此時所有的支持事務的表(INNODB)數據均來自同一時間點。最后再釋放全局讀鎖,此刻數據庫實例可以執行任何操作(正常情況下,加全局讀鎖和釋放鎖的時間很短)。

2. 獲取備份對象的元數據信息并 單線程 導出表「 SLEECT  * 」。導出表分3種情況:已經導出完成、還未導出和正在導出:

  • 對于 已導出的 表,可以做DDL操作( 使用 SAVEPOINT提前釋放 導出表的 metadata lock );
  • 對還未導出的表, INNODB 表的DDL操作,能否執行成功取決于DDL的操作方式: no-rebuild 方式的DDL執行成功, rebuild 方式的DDL執行失敗( Table definition has changed),MyISAM引擎的表都能執行成功;
  • 對正在導出的表,DDL會出現MDL,此時對該表后續的查詢都會出現MDL,導致業務不可用(時間根據備份時長決定),直到該表導出完成。

3. 獲取除表外的其他對象:自定義函數、存儲過程、VIEW等。

4. 獲取當前的GTID信息,所有對象的導出均轉儲到 一個文件 ,完成備份。

3.2 mysqlpump

  • 說明

mysqlpump 并行導出 功能的架構為:隊列+線程,允許有多個隊列,每個隊列下有多個線程,一個隊列可以綁定1個或者多個數據庫。 在mysqldump的基礎上額外支持了:并行備份、 延遲創建索引、 備份用戶、對象的通配符過濾、 DEFINER忽略等特性。

mysqlpump的備份是基于表并行的,對于每張表的導出只能是單個線程的,如果一張表非常大,大部分的時間都是消耗在這個表的備份上,并行備份的效果可能就不明顯。

  • 備份命令
mysqlpump -udump_user -p -P3306 -h127.0.0.1 --set-gtid-purged=on --default-parallelism=2  --single-transaction --default-character-set=utf8 --exclude-databases=mysql,sys,information_schema,performance_schema > all.sql
  • 備份流程

開啟 general_log 查看備份流程,大致的備份流程如下圖所示:

流程說明:

1. 多線程連接數據庫,設置當前變量,刷臟頁并加一個全局讀鎖,此刻數據庫實例只能SELECT,不能執行任何類型的操作(會影響業務),再設置事務隔離級別和開啟一致性快照讀并獲取GITD 信息,此時所有的支持事務的表(INNODB)數據均來自同一時間點。最后再釋放全局讀鎖,此刻數據庫實例可以執行任何操作(正常情況下,加全局讀鎖和釋放鎖的時間很短)。

2.獲取除表外的其他對象:自定義函數、存儲過程、VIEW等。

3.  獲取備份對象的元數據信息并 多線程 導出表 「 SLEECT col1,col2,... 」。導出表分3種情況:已經導出完成、還未導出和正在導出:

  • 對于 已導出的 表, 不能 做DDL操作(不支持SAVEPOINT);
  • 對還未導出的表, INNODB 表的DDL操作,能否執行成功取決于DDL的操作方式: no-rebuild 方式的DDL執行成功, rebuild 方式的DDL執行失敗( Table definition has changed),MyISAM引擎的表都能執行成功, 但如果表結構先于DDL導出,再導出數據,則在還原的時候會報異常(表結構和導出的數據不一致);
  • 對正在導出的表,DDL會出現MDL,此時對該表后續的查詢都會出現MDL,導致業務不可用(時間根據備份時長決定),直到該表導出完成。

4. 所有對象的備份均轉儲到 一個文件 ,完成備份。 備 份文件中存儲的表結構中只有主鍵,二級索引單獨一行存儲,目的是在恢復完數據后再添加二級索引,提高恢復效率(延遲創建索引) 。

3.3 mydumper

  • 說明

mydumper利用INNODB的MVCC版本控制的功能,實現 多線程 并發獲取一致性數據。特別是表以chunk的方式批量導出,即支持一張表多個線程以chunk的方式批量導出(基于行的多線程), 備份的對象支持正則匹配 。

  • 備份命令
mydumper -u dump_user -p -h 127.0.0.1 -P 3306 --use-savepoints --trx-consistency-only -r 100000 -t 2 -G -R -E -B sbtest -o /data/backup/

--trx-consistency-only:如果不加,則FTWRL的鎖在備份完成之后釋放。加了會在獲取到一致性快照讀之后釋放(UNLOCK TABLES)。

--rows:-r,分片導出的行數。

--use-savepoints 和 --rows互斥。

  • 備份流程

開啟 general_log 查看備份流程,大致的備份流程如下圖所示:

流程說明:

1. 連接數據庫,設置當前變量,刷臟頁并加一個全局讀鎖,此刻數據庫實例只能SELECT,不能執行任何類型的操作(會影響業務),再獲取BINLOG和GITD 信息并設置事務隔離級別和開啟一致性快照,此時所有的支持事務的表(INNODB)數據均來自同一時間點。最后再釋放全局讀鎖,此刻數據庫實例可以執行任何操作(正常情況,加全局讀鎖和釋放鎖的時間很短)。

2.  獲取備份對象的元數據信息并 多線程 導出表「 SLEECT  * 」。導出表分3種情況:已經導出完成、還未導出和正在導出:

  • 對于 已導出的 表,可以做DDL操作( 使用 SAVEPOINT提前釋放 導出表的 metadata lock ,如果使用分片導出, SAVEPOINT 將不可用 );
  • 對還未導出的表, INNODB 表的DDL操作,能否執行成功取決于DDL的操作方式: no-rebuild 方式的DDL執行成功, rebuild 方式的DDL執行失敗( Table definition has changed),MyISAM引擎的表都能執行成功;
  • 對正在導出的表,DDL會出現MDL,此時對該表后續的查詢都會出現MDL,導致業務不可用(時間根據備份時長決定),直到該表導出完成。

3. 所有表都導出完成后,再獲取除表外的其他對象:自定義函數、存儲過程、VIEW等

4.所有對象的導出均轉儲到 多個文件 ( 將表數據分塊導出 成多個數據文件 ) ,完成備份。

3.4 mysqlshell

  • 說明

MySQL Shell 是Oracle官方提供的一個交互式工具,用于開發和管理MySQL的服務器。其中的util.dumpInstance、util.dumpSchemas、util.loadDump 等是對MySQL進行備份管理,使用zstd實時壓縮算法,支持 多線程 備份,以chunk的方式批量導出,支持一張表多個線程以chunk的方式批量導出。

  • 備份命令
util.dumpSchemas(['sbtest'],'/data/backup',{"threads":1,"consistent":true})
  • 備份流程

流程說明:

1. 連接數據庫,設置當前變量,刷臟頁并加一個全局讀鎖,此刻數據庫實例只能SELECT,不能執行任何類型的操作(會影響業務),再獲取BINLOG、GITD和備份對象的元數據信息,接著設置事務隔離級別和啟動一致性快照,此時所有的支持事務的表(INNODB)數據均來自同一時間點。最后再釋放全局讀鎖,此刻數據庫實例可以執行任何操作(正常情況,加全局讀鎖和釋放鎖的時間很短)。

2. 獲取備份對象:自定義函數、存儲過程、VIEW等。

3.  多線程 導出表「 SLEECT col1,col2,... 」。導出表分3種情況:已經導出完成、還未導出和正在導出:

  • 對于 已導出的 表, 不能 做DDL操作( 不支持SAVEPOINT );
  • 對還未導出的表, 需要區分有沒有PK或UK:

沒有PK和UK, 還要根據DDL的操作方式: no-rebuild 方式的DDL執行成功, rebuild 方式的DDL執行失敗( Table definition has changed),MyISAM引擎的表都能執行成功;

有PK或UK,和正在導出的表情況一樣,原因是在獲取分片信息時需要查詢表的最大最小值。

  • 對正在導出的表,DDL會出現MDL,此時對該表后續的查詢都會出現MDL,導致業務不可用(時間根據備份時長決定),直到該表導出完成。

4.所有對象的導出均轉存到 多個文件 (將表數據分塊導出成多個數據文件),完成備份。

3.5 小結

從上面各邏輯備份的流程中看到,在一致性備份下,所有表的DML操作不影響(除FTWRL短暫的時刻外),而DDL操作都存在一定的風險。所以在 邏輯備份期間,要盡量避免DDL操作 。

各邏輯備份工具的參數可以看官方文檔,對 比各工具之后,如表所示:

推薦使用的邏輯備份 ,需要具備的條件:支持一致性備份、行級別的 分片 多 線 程 導出 、 導出到多個文件(恢復 快 ), 延遲創建索引 和savepoint能力。從上面表中看到, mydumper 和 mysqlshell 中的dump方法能滿足較多的條件。

4. 總結

希望通過閱讀本文,能讓大家更清晰的了解邏輯備份的整個實現流程, 在選擇合適的邏輯備份時有幫助。

責任編輯:張燕妮 來源: 云數據庫技術
相關推薦

2011-05-16 11:29:00

MySQL自動備份

2011-03-28 16:12:55

mysql自動遠程備份

2010-05-12 09:57:17

MySQL

2010-06-04 19:15:42

MySQL安裝

2021-04-20 13:40:56

Epoll IO

2009-12-07 16:15:08

RHEL5 mysql

2023-06-09 14:01:56

2010-08-17 09:55:33

DB2備份測試

2009-06-04 15:51:46

Struts流程圖

2017-03-03 09:10:41

2010-05-12 13:58:28

MySQL定時數據備份

2010-05-17 08:47:08

MySQL 定時數據備

2023-08-31 10:04:31

Oracle數據庫

2024-09-05 08:28:25

2010-05-24 10:23:34

實現MySQL

2010-05-25 18:29:30

MySQL遠程訪問

2022-03-06 12:15:38

NettyReactor線程

2018-01-02 09:17:24

機器學習廣告推薦系統

2010-03-31 16:57:30

Oracle SH文件

2018-07-17 16:18:50

登陸注冊手機驗證業務邏輯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠综合久久av一区二区老牛 | 久久精品在线播放 | 亚洲精品中文字幕在线 | 亚洲精品视频免费 | 欧美一级片 | 草久在线 | 久久久久久国产 | 亚洲日韩中文字幕一区 | 欧美a级成人淫片免费看 | 一本在线 | 不卡av在线 | 大象一区 | 人人干免费 | 欧美国产日本一区 | 欧美成人二区 | 亚洲综合一区二区三区 | 一区二区精品 | 欧美日一区二区 | 久久久久亚洲 | 波多野结衣在线观看一区二区三区 | 日韩一级二级片 | 中文字幕高清 | 中文字幕二区 | 波多野吉衣在线播放 | 在线一区 | 午夜精品久久 | 国产成人精品区一区二区不卡 | 新91视频网| 国产精品久久二区 | 三级高清 | 毛片在线看片 | 精品久久久久久亚洲精品 | 中文字幕在线观看第一页 | 黄网站涩免费蜜桃网站 | www.99re| 99久久精品免费看国产四区 | 欧美性吧 | 国产成人精品一区二区三区在线观看 | 国产黄色一级片 | 中文一区二区视频 | 欧美日韩综合 |