CockroachDB-备份与恢复(5)BACKUP命令
CRDB的BACKUP語(yǔ)句允許您創(chuàng)建集群模式和數(shù)據(jù)的完整或增量備份,這些備份與給定的時(shí)間戳一致。
您可以備份整個(gè)集群,包括:
- 相關(guān)系統(tǒng)表
- 所有數(shù)據(jù)庫(kù)
- 所有表(自動(dòng)包含它們的索引)
- 所有視圖
- 所有預(yù)定的作業(yè)
你也可以備份:
- 一個(gè)單獨(dú)的數(shù)據(jù)庫(kù),它包括所有的表和視圖。
- 一個(gè)單獨(dú)的表,其中包括它的索引和視圖。
BACKUP只備份整個(gè)表;它不支持備份表的子集。
因?yàn)閏ockachdb設(shè)計(jì)了高容錯(cuò)性,所以這些備份主要用于通過(guò)RESTORE進(jìn)行災(zāi)難恢復(fù)(即,如果您的集群失去了大部分節(jié)點(diǎn))。孤立的問(wèn)題(如小規(guī)模節(jié)點(diǎn)中斷)不需要任何干預(yù)。
要查看使用backup語(yǔ)句創(chuàng)建的備份的內(nèi)容,請(qǐng)使用SHOW backup。
考慮因素
恢復(fù)之前目標(biāo)集群上的區(qū)域配置將在使用備份集群中的區(qū)域配置進(jìn)行集群恢復(fù)時(shí)被覆蓋。如果在進(jìn)行備份時(shí)集群上沒(méi)有定制的分區(qū)配置,那么在恢復(fù)之后,目標(biāo)集群將使用RANGE DEFAULT配置中的分區(qū)配置。
使用exclude_data_from_backup參數(shù)從備份中排除表的行數(shù)據(jù)。
BACKUP是一個(gè)阻塞語(yǔ)句。要異步運(yùn)行備份作業(yè),請(qǐng)使用DETACHED選項(xiàng)。
存儲(chǔ)考慮
備份和恢復(fù)不支持HTTP存儲(chǔ)。
修改存儲(chǔ)位置中的備份文件可能會(huì)使備份失效,因此會(huì)阻止恢復(fù)。
必需權(quán)限
全集群備份只能由管理角色的成員運(yùn)行。默認(rèn)情況下,root用戶屬于admin角色。
對(duì)于所有其他備份,用戶必須對(duì)正在備份的所有對(duì)象具有讀訪問(wèn)權(quán)。數(shù)據(jù)庫(kù)備份需要CONNECT權(quán)限,表備份需要SELECT權(quán)限。用戶定義模式的備份或包含用戶定義類型的備份需要USAGE特權(quán)。
BACKUP要求對(duì)其目標(biāo)目的地具有完全的讀和寫權(quán)限。
參數(shù)
cockachdb將完整備份存儲(chǔ)在備份集合中。集合中的每個(gè)全量備份也可以有增量備份。
| targets | 備份目標(biāo)。不指定代表備份整個(gè)集群。或者使用DATABASE {database_name}[,…]代表備份哪些庫(kù),使用TABLE {table_name}[,…]代表備份哪些表 |
| subdirectory | 指定集合中增量備份的名稱(例如,2011/03/23 -213101.37)。要查看可用的備份子目錄,請(qǐng)使用SHOW BACKUPS IN collectionURI。如果沒(méi)有提供備份子目錄,則增量備份將存儲(chǔ)在集合URI根目錄的默認(rèn)/incrementals目錄中。警告:如果使用任意STRING作為子目錄,將創(chuàng)建一個(gè)新的完全備份,但它永遠(yuǎn)不會(huì)顯示在SHOW BACKUPS in中。我們不建議使用任意字符串作為子目錄名。 |
| LATEST | 將增量備份追加到最近完成的完整備份的子目錄。 |
| collectionURI | 要存儲(chǔ)備份的URI。(或者,用于位置感知備份的默認(rèn)位置。)有關(guān)此URL結(jié)構(gòu)的信息,請(qǐng)參閱備份文件URL。 |
| localityURI | 包含用于非默認(rèn)位置的COCKROACH_LOCALITY參數(shù)的URI,該位置是單個(gè)位置感知備份的一部分。 |
| timestamp | 備份從時(shí)間戳開始就存在的數(shù)據(jù)。時(shí)間戳必須比您的集群上一次垃圾收集(默認(rèn)每25小時(shí)發(fā)生一次,但可以對(duì)每個(gè)表進(jìn)行配置)更近。 |
| backup_options | 使用這些選項(xiàng)的逗號(hào)分隔列表來(lái)控制備份行為。 |
backup_options備份選項(xiàng)
| revision_history | N/A | 創(chuàng)建一個(gè)具有完整修訂歷史的備份,它記錄了垃圾收集周期內(nèi)從給定時(shí)間戳開始(包括給定時(shí)間戳)對(duì)集群所做的每一個(gè)更改。 |
| encryption_passphrase | STRING | 用于加密BACKUP語(yǔ)句生成的文件(BACKUP清單和數(shù)據(jù)文件)的密碼短語(yǔ)。在使用該文件進(jìn)行恢復(fù)時(shí),解密該文件以及在使用SHOW backup時(shí)列出備份的內(nèi)容都需要使用相同的密碼短語(yǔ)。對(duì)于密碼短語(yǔ)的長(zhǎng)度沒(méi)有實(shí)際的限制。 |
| DETACHED | N/A | 當(dāng)備份以DETACHED模式運(yùn)行時(shí),它將異步執(zhí)行。任務(wù)ID將在備份任務(wù)創(chuàng)建完成后返回。注意,如果指定了DETACHED,則不會(huì)返回進(jìn)一步的作業(yè)信息和作業(yè)完成狀態(tài)。有關(guān)返回作業(yè)數(shù)據(jù)之間差異的更多信息,請(qǐng)參見下面的示例。要檢查作業(yè)狀態(tài),請(qǐng)使用SHOW JOBS語(yǔ)句。要在事務(wù)中運(yùn)行備份,請(qǐng)使用DETACHED選項(xiàng)。 |
| kms | STRING | 密鑰管理服務(wù)(KMS) URI(或以逗號(hào)分隔的URI列表),用于加密BACKUP語(yǔ)句生成的文件(BACKUP清單和數(shù)據(jù)文件)。在使用該文件進(jìn)行恢復(fù)時(shí),解密該文件以及在使用SHOW backup時(shí)列出備份的內(nèi)容都需要相同的KMS URI。 |
| incremental_location | STRING | 在與默認(rèn)增量備份位置不同的位置創(chuàng)建增量備份。WITH incremental_location = 'explicit_incrementals_URI’請(qǐng)參閱使用顯式指定目的地的增量備份。 |
備份文件URL
| Amazon S3 | s3://acme-co/employees.sql?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456 |
| Azure | azure://acme-co/employees.sql?AZURE_ACCOUNT_NAME=acme-co&AZURE_ACCOUNT_KEY=url-encoded-123 |
| Google Cloud | gs://acme-co/employees.sql?AUTH=specified&CREDENTIALS=encoded-123 |
| HTTP | http://localhost:8080/employees.sql |
| NFS/Local | nodelocal://1/path/employees,nodelocal://self/nfsmount/backups/employees |
功能細(xì)節(jié)
依賴對(duì)象必須與它們所依賴的對(duì)象同時(shí)備份,包括表相關(guān)的外鍵約束、sequence、視圖
要從備份中排除表的行數(shù)據(jù),請(qǐng)使用exclude_data_from_backup參數(shù)和CREATE table或ALTER table。
性能
BACKUP進(jìn)程通過(guò)將工作分配到所有節(jié)點(diǎn),將其對(duì)集群性能的影響降到最低。每個(gè)節(jié)點(diǎn)只備份它所存儲(chǔ)的數(shù)據(jù)的一個(gè)特定子集(它所服務(wù)的寫入數(shù)據(jù)),沒(méi)有兩個(gè)節(jié)點(diǎn)備份相同的數(shù)據(jù)。
與任何讀取一樣,如果范圍包含未處理的意圖,BACKUP不能導(dǎo)出該范圍。雖然您通常希望像BACKUP這樣的大容量后臺(tái)作業(yè)對(duì)前臺(tái)流量的影響盡可能小,但更重要的是讓備份實(shí)際完成(這將維護(hù)您的恢復(fù)點(diǎn)目標(biāo)(RPO))。普通的讀事務(wù)會(huì)阻塞直到它遇到的任何未提交的寫都被解決,與之不同的是,BACKUP只會(huì)阻塞一個(gè)可配置的持續(xù)時(shí)間,然后調(diào)用優(yōu)先級(jí)以確保它能按時(shí)完成。
我們建議總是以至少10秒前的特定時(shí)間戳啟動(dòng)備份。例如:
BACKUP...AS OF SYSTEM TIME '-10s';這降低了BACKUP因?yàn)榕c其他語(yǔ)句/事務(wù)爭(zhēng)用而被重試的可能性,從而提高了性能。但是,因?yàn)锳S OF SYSTEM TIME返回的是歷史數(shù)據(jù),所以您的讀取可能會(huì)過(guò)時(shí)。使用AS OF SYSTEM TIME '-10s’進(jìn)行備份是減少可能遇到的仍在運(yùn)行的事務(wù)數(shù)量的最佳實(shí)踐,因?yàn)閭浞輰⒕哂袃?yōu)先級(jí),并將在備份完成后強(qiáng)制仍在運(yùn)行的事務(wù)重新啟動(dòng)。
BACKUP最初會(huì)要求各個(gè)范圍進(jìn)行備份,但如果它們遇到意圖,則跳過(guò)。任何被跳過(guò)的范圍都放在隊(duì)列的末尾。當(dāng)BACKUP完成了它的初始傳遞并重新訪問(wèn)范圍時(shí),它將要求在給定的時(shí)間限制(默認(rèn)為1分鐘)內(nèi)沒(méi)有處理的任何范圍嘗試處理它遇到的任何意圖,并且不跳過(guò)。此外,備份的事務(wù)優(yōu)先級(jí)被設(shè)置為高,這將導(dǎo)致其他事務(wù)中止,直到意圖被處理和備份完成。
v22.1新增功能:如果備份作業(yè)在重試次數(shù)達(dá)到最大次數(shù)后繼續(xù)遇到瞬時(shí)錯(cuò)誤,則備份作業(yè)將暫停,而不是進(jìn)入失敗狀態(tài)。暫停備份后,可以恢復(fù)備份或取消備份。
要設(shè)置寫入每個(gè)備份文件的備份數(shù)據(jù)量的目標(biāo),可以使用bulkio.backup.file_size集群設(shè)置。
查看并控制備份任務(wù)
在cockachdb成功啟動(dòng)備份后,它將備份注冊(cè)為一個(gè)作業(yè),您可以執(zhí)行以下操作:
- SHOW JOBS
- PAUSE JOBS
- RESUME JOBS
- CANCEL JOBS
備份示例
全量備份整個(gè)集群
BACKUP INTO 'nodelocal://1/windbackup'AS OF SYSTEM TIME '-10s' WITH revision_history,detached;基于全量備份進(jìn)行增量備份
BACKUP INTO LATEST IN 'nodelocal://1/windbackup'AS OF SYSTEM TIME '-10s' WITH revision_history,detached;增量備份并指定增量備份目錄
BACKUP INTO '/2021/11/23/inc_bk/1' IN 'nodelocal://1/windbackup'AS OF SYSTEM TIME '-10s' WITH revision_history,detached;總結(jié)
以上是生活随笔為你收集整理的CockroachDB-备份与恢复(5)BACKUP命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 围成圈报数题
- 下一篇: 在matlab中数组运算符,matlab