CockroachDB-备份与恢复(5)BACKUP命令
CRDB的BACKUP語句允許您創建集群模式和數據的完整或增量備份,這些備份與給定的時間戳一致。
您可以備份整個集群,包括:
- 相關系統表
- 所有數據庫
- 所有表(自動包含它們的索引)
- 所有視圖
- 所有預定的作業
你也可以備份:
- 一個單獨的數據庫,它包括所有的表和視圖。
- 一個單獨的表,其中包括它的索引和視圖。
BACKUP只備份整個表;它不支持備份表的子集。
因為cockachdb設計了高容錯性,所以這些備份主要用于通過RESTORE進行災難恢復(即,如果您的集群失去了大部分節點)。孤立的問題(如小規模節點中斷)不需要任何干預。
要查看使用backup語句創建的備份的內容,請使用SHOW backup。
考慮因素
恢復之前目標集群上的區域配置將在使用備份集群中的區域配置進行集群恢復時被覆蓋。如果在進行備份時集群上沒有定制的分區配置,那么在恢復之后,目標集群將使用RANGE DEFAULT配置中的分區配置。
使用exclude_data_from_backup參數從備份中排除表的行數據。
BACKUP是一個阻塞語句。要異步運行備份作業,請使用DETACHED選項。
存儲考慮
備份和恢復不支持HTTP存儲。
修改存儲位置中的備份文件可能會使備份失效,因此會阻止恢復。
必需權限
全集群備份只能由管理角色的成員運行。默認情況下,root用戶屬于admin角色。
對于所有其他備份,用戶必須對正在備份的所有對象具有讀訪問權。數據庫備份需要CONNECT權限,表備份需要SELECT權限。用戶定義模式的備份或包含用戶定義類型的備份需要USAGE特權。
BACKUP要求對其目標目的地具有完全的讀和寫權限。
參數
cockachdb將完整備份存儲在備份集合中。集合中的每個全量備份也可以有增量備份。
| targets | 備份目標。不指定代表備份整個集群。或者使用DATABASE {database_name}[,…]代表備份哪些庫,使用TABLE {table_name}[,…]代表備份哪些表 |
| subdirectory | 指定集合中增量備份的名稱(例如,2011/03/23 -213101.37)。要查看可用的備份子目錄,請使用SHOW BACKUPS IN collectionURI。如果沒有提供備份子目錄,則增量備份將存儲在集合URI根目錄的默認/incrementals目錄中。警告:如果使用任意STRING作為子目錄,將創建一個新的完全備份,但它永遠不會顯示在SHOW BACKUPS in中。我們不建議使用任意字符串作為子目錄名。 |
| LATEST | 將增量備份追加到最近完成的完整備份的子目錄。 |
| collectionURI | 要存儲備份的URI。(或者,用于位置感知備份的默認位置。)有關此URL結構的信息,請參閱備份文件URL。 |
| localityURI | 包含用于非默認位置的COCKROACH_LOCALITY參數的URI,該位置是單個位置感知備份的一部分。 |
| timestamp | 備份從時間戳開始就存在的數據。時間戳必須比您的集群上一次垃圾收集(默認每25小時發生一次,但可以對每個表進行配置)更近。 |
| backup_options | 使用這些選項的逗號分隔列表來控制備份行為。 |
backup_options備份選項
| revision_history | N/A | 創建一個具有完整修訂歷史的備份,它記錄了垃圾收集周期內從給定時間戳開始(包括給定時間戳)對集群所做的每一個更改。 |
| encryption_passphrase | STRING | 用于加密BACKUP語句生成的文件(BACKUP清單和數據文件)的密碼短語。在使用該文件進行恢復時,解密該文件以及在使用SHOW backup時列出備份的內容都需要使用相同的密碼短語。對于密碼短語的長度沒有實際的限制。 |
| DETACHED | N/A | 當備份以DETACHED模式運行時,它將異步執行。任務ID將在備份任務創建完成后返回。注意,如果指定了DETACHED,則不會返回進一步的作業信息和作業完成狀態。有關返回作業數據之間差異的更多信息,請參見下面的示例。要檢查作業狀態,請使用SHOW JOBS語句。要在事務中運行備份,請使用DETACHED選項。 |
| kms | STRING | 密鑰管理服務(KMS) URI(或以逗號分隔的URI列表),用于加密BACKUP語句生成的文件(BACKUP清單和數據文件)。在使用該文件進行恢復時,解密該文件以及在使用SHOW backup時列出備份的內容都需要相同的KMS URI。 |
| incremental_location | STRING | 在與默認增量備份位置不同的位置創建增量備份。WITH incremental_location = 'explicit_incrementals_URI’請參閱使用顯式指定目的地的增量備份。 |
備份文件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 |
功能細節
依賴對象必須與它們所依賴的對象同時備份,包括表相關的外鍵約束、sequence、視圖
要從備份中排除表的行數據,請使用exclude_data_from_backup參數和CREATE table或ALTER table。
性能
BACKUP進程通過將工作分配到所有節點,將其對集群性能的影響降到最低。每個節點只備份它所存儲的數據的一個特定子集(它所服務的寫入數據),沒有兩個節點備份相同的數據。
與任何讀取一樣,如果范圍包含未處理的意圖,BACKUP不能導出該范圍。雖然您通常希望像BACKUP這樣的大容量后臺作業對前臺流量的影響盡可能小,但更重要的是讓備份實際完成(這將維護您的恢復點目標(RPO))。普通的讀事務會阻塞直到它遇到的任何未提交的寫都被解決,與之不同的是,BACKUP只會阻塞一個可配置的持續時間,然后調用優先級以確保它能按時完成。
我們建議總是以至少10秒前的特定時間戳啟動備份。例如:
BACKUP...AS OF SYSTEM TIME '-10s';這降低了BACKUP因為與其他語句/事務爭用而被重試的可能性,從而提高了性能。但是,因為AS OF SYSTEM TIME返回的是歷史數據,所以您的讀取可能會過時。使用AS OF SYSTEM TIME '-10s’進行備份是減少可能遇到的仍在運行的事務數量的最佳實踐,因為備份將具有優先級,并將在備份完成后強制仍在運行的事務重新啟動。
BACKUP最初會要求各個范圍進行備份,但如果它們遇到意圖,則跳過。任何被跳過的范圍都放在隊列的末尾。當BACKUP完成了它的初始傳遞并重新訪問范圍時,它將要求在給定的時間限制(默認為1分鐘)內沒有處理的任何范圍嘗試處理它遇到的任何意圖,并且不跳過。此外,備份的事務優先級被設置為高,這將導致其他事務中止,直到意圖被處理和備份完成。
v22.1新增功能:如果備份作業在重試次數達到最大次數后繼續遇到瞬時錯誤,則備份作業將暫停,而不是進入失敗狀態。暫停備份后,可以恢復備份或取消備份。
要設置寫入每個備份文件的備份數據量的目標,可以使用bulkio.backup.file_size集群設置。
查看并控制備份任務
在cockachdb成功啟動備份后,它將備份注冊為一個作業,您可以執行以下操作:
- SHOW JOBS
- PAUSE JOBS
- RESUME JOBS
- CANCEL JOBS
備份示例
全量備份整個集群
BACKUP INTO 'nodelocal://1/windbackup'AS OF SYSTEM TIME '-10s' WITH revision_history,detached;基于全量備份進行增量備份
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;總結
以上是生活随笔為你收集整理的CockroachDB-备份与恢复(5)BACKUP命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 围成圈报数题
- 下一篇: 华为LAB实验室4-朴素贝叶斯