KingbaseES 備份恢復工具:sys_dump 與 sys_restore
KingbaseES(金倉數據庫)作為國產數據庫的主流產品,在 V8R6 版本中內置了
sys_dump(備份工具)和 sys_restore(恢復工具),用于實現數據庫的可靠備份與精準恢復。這兩個工具支持多種備份格式,可適配不同場景(如跨庫遷移、日常備份、應急恢復),且能在數據庫并發使用時生成一致備份,是 KingbaseES 運維的核心工具。本文將從工具定位、命令解析、實戰示例到注意事項,全面講解其使用方法。
一、工具核心定位與基礎原則
在開始實操前,需先明確兩個工具的核心作用與使用前提,避免運維風險。
1. 工具定位
- sys_dump:僅針對單個數據庫進行備份,將數據庫內容導出為 “腳本文件” 或 “歸檔文件”。支持在數據庫運行中備份(無需關閉服務),但會讀取數據庫快照,確保數據一致性。
- sys_restore:僅用于恢復
sys_dump生成的歸檔文件(非腳本文件),支持靈活選擇恢復內容(如僅恢復數據、僅恢復表結構),是歸檔格式備份的專屬恢復工具。 - 補充說明:若需備份 “數據庫集群全局對象”(如角色、表空間),需使用
sys_dumpall工具,而非sys_dump。
2. 基礎使用原則
- 業務低峰操作:盡管
sys_dump支持并發備份,但仍會占用磁盤 I/O 和數據庫資源,建議在業務停止或低峰期執行,避免影響線上性能。 - 格式匹配:腳本文件(plain 格式)無需
sys_restore,可直接通過ksql導入;歸檔格式(custom/directory/tar)必須用sys_restore恢復,二者不可混用。 - 編碼一致性:備份時指定的字符編碼(如 UTF-8),恢復時需保持一致,否則可能出現亂碼。
二、備份工具 sys_dump:命令解析與實戰示例
sys_dump 的核心是通過參數控制 “備份范圍、輸出格式、數據編碼”,其命令格式簡潔但參數靈活,需根據場景選擇合適配置。1. 核心命令格式與參數
(1)命令格式
sys_dump [連接參數...] [選項...] [數據庫名]
- 連接參數:如
-U 用戶名(指定登錄用戶)、-h 主機地址(遠程連接時使用)、-p 端口(默認 54321,KingbaseES 默認端口)。 - 選項:控制備份行為的核心參數,常用選項如下表:
(2)關鍵選項解析
| 選項 | 簡寫 | 作用說明 | 適用場景 |
|---|---|---|---|
--format=format |
-F |
指定備份格式,支持 4 種類型:
p(plain):純文本 SQL 腳本(默認)
c(custom):自定義歸檔(默認壓縮,支持靈活恢復)
d(directory):目錄歸檔(支持并行備份,默認壓縮)
t(tar):tar 歸檔(不壓縮,適合歸檔到磁帶) |
日常備份選 c/d;跨庫遷移選 p;磁帶存儲選 t |
--file=file |
-f |
指定備份文件 / 目錄路徑(如 -f /backup/test.dump) |
所有場景,避免備份文件散落在默認路徑 |
--data-only |
-a |
僅備份數據,不備份 “模式”(表結構、索引、函數等) | 僅需恢復數據,表結構已存在的場景 |
--schema-only |
-s |
僅備份模式(數據定義),不備份數據 | 表結構遷移、環境初始化場景 |
--clean |
-c |
在備份腳本中添加 “刪除舊對象” 命令(如 DROP TABLE) |
恢復時需覆蓋舊數據,避免對象沖突 |
--create |
-C |
在備份腳本開頭添加 “創建數據庫” 命令 | 跨實例遷移,目標端無對應數據庫時 |
--encoding=encoding |
-E |
指定備份文件的字符編碼(如 utf-8) |
多環境編碼不一致,需統一編碼時 |
--column-inserts |
- | 將數據導出為 “帶列名的 INSERT 語句”(如 INSERT INTO t (id,name) VALUES (...)) |
跨數據庫遷移(如導入非 KingbaseES 數據庫) |
--rows-per-insert=n |
- | 控制每條 INSERT 語句的行數(如 --rows-per-insert=5 表示每 5 行一條語句) |
避免單條 INSERT 語句過大,減少恢復時鎖等待 |
2. 實戰示例:不同場景的備份操作
根據 “備份目的” 選擇不同格式與參數,以下是 4 類典型場景的實操命令與效果說明。
場景 1:日常全量備份(自定義歸檔格式)
需求:備份
命令:
test1 數據庫,要求壓縮存儲、支持后續靈活恢復(如僅恢復某張表)。
# -Fc:自定義歸檔格式(默認壓縮);-E utf-8:指定編碼;-U system:使用 system 用戶登錄
sys_dump -Fc -E utf-8 -U system -f /home/kingbase/backup/test1_custom.dump test1
執行效果:
- 生成單個壓縮歸檔文件
test1_custom.dump,體積小、便于傳輸; - 后續可通過
sys_restore選擇恢復內容(如僅恢復數據、僅恢復索引)。
場景 2:大數據庫并行備份(目錄歸檔格式)
需求:備份超大規模
命令:
test1 數據庫(如 100GB),需加快備份速度,支持并行處理。
# -Fd:目錄歸檔格式(自動分文件存儲,支持并行);-f 指定輸出目錄(需不存在)
sys_dump -Fd -E utf-8 -U system -f /home/kingbase/backup/test1_dir test1
執行效果:
- 生成
test1_dir目錄,內部包含多個壓縮數據文件(如5664.dat.gz)和索引文件toc.dat(記錄歸檔內容); - 可通過
--jobs=N參數指定并行備份線程數(如--jobs=4用 4 線程備份),大幅提升大庫備份效率。
場景 3:跨數據庫遷移(腳本格式)
需求:將
命令:
test1 數據庫遷移到非 KingbaseES 數據庫(如 PostgreSQL),需導出為通用 SQL 腳本。
# -Fp:腳本格式;-c -C:含刪除舊對象、創建數據庫命令;--column-inserts:帶列名的 INSERT
sys_dump -Fp -c -C -E utf-8 --column-inserts --rows-per-insert=5 -U system -f /home/kingbase/backup/test1_sql.sql test1
執行效果:
- 生成純文本 SQL 文件
test1_sql.sql,內容包含 “創建數據庫→刪除舊表→創建表結構→插入數據” 全流程; - 數據插入語句為通用格式(如
INSERT INTO bigtable (id,name) VALUES (1,'name1'), (2,'name2')),可直接在其他 SQL 數據庫中執行。
場景 4:僅備份表結構(腳本格式)
需求:為開發環境初始化
命令:
test1 數據庫表結構,無需備份業務數據。
# -s:僅備份模式(表結構、索引、函數等);-Fp:腳本格式
sys_dump -Fp -s -U system -f /home/kingbase/backup/test1_schema.sql test1
執行效果:
- 腳本文件僅包含
CREATE TABLE、CREATE INDEX等結構定義語句,無任何 INSERT 數據語句,體積小、便于傳輸。
三、恢復工具 sys_restore:命令解析與實戰示例
sys_restore 是歸檔格式備份的 “專屬恢復工具”,支持靈活篩選恢復內容,核心優勢是 “可選擇性恢復”(如僅恢復某張表、僅恢復數據)。1. 核心命令格式與參數
(1)命令格式
sys_restore [連接參數...] [選項...] [歸檔文件/目錄]
- 歸檔文件 / 目錄:若為
custom/tar格式,指定文件路徑;若為directory格式,指定目錄路徑。 - 關鍵選項:與
sys_dump部分選項功能一致,但新增 “恢復控制” 相關參數,如下表:
(2)關鍵選項解析
| 選項 | 簡寫 | 作用說明 | 適用場景 |
|---|---|---|---|
--format=format |
-F |
指定歸檔格式(需與備份格式一致):
c(custom)、d(directory)、t(tar) |
必須與備份格式匹配,否則無法識別 |
--dbname=dbname |
-d |
指定恢復目標數據庫(需提前創建,且為 “干凈數據庫”) | 所有恢復場景,是核心參數 |
--clean |
-c |
恢復前先刪除目標數據庫中同名對象(如表、索引) | 覆蓋恢復,避免 “對象已存在” 報錯 |
--create |
-C |
恢復前自動創建目標數據庫(無需提前建庫) | 目標端無對應數據庫時 |
--data-only |
-a |
僅恢復數據,不恢復表結構 | 表結構已存在,僅需補全數據 |
--schema-only |
-s |
僅恢復表結構,不恢復數據 | 重建表結構,無需業務數據 |
--list |
-l |
列出歸檔文件中的所有內容(如表名、索引名) | 恢復前確認歸檔包含的對象,避免漏恢復 |
--file=filename |
-f |
將歸檔內容解析為 SQL 腳本(不直接恢復到數據庫) | 需修改恢復腳本后再執行(如調整表名) |
2. 實戰示例:不同場景的恢復操作
恢復操作需 “先匹配備份格式,再明確恢復目標”,以下示例對應
sys_dump 的 3 類歸檔格式。場景 1:恢復自定義歸檔(custom 格式)
需求:將
前提:提前創建干凈的目標數據庫(用
test1_custom.dump(custom 格式)恢復到 test1 數據庫,覆蓋舊數據。
template0 模板,避免繼承多余對象):-- 在 KingbaseES 中執行,創建空數據庫
CREATE DATABASE test1 WITH TEMPLATE = template0 ENCODING = 'UTF8';
恢復命令:
# -Fc:指定 custom 格式;-c:恢復前刪除舊對象;-d test1:恢復到 test1 數據庫
sys_restore -Fc -c -U system -d test1 /home/kingbase/backup/test1_custom.dump
場景 2:恢復目錄歸檔(directory 格式)
需求:將
恢復命令:
test1_dir(directory 格式)僅恢復 “數據”,不恢復表結構(表結構已提前創建)。
# -Fd:指定 directory 格式;-a:僅恢復數據;-d test1:目標數據庫
sys_restore -Fd -a -U system -d test1 /home/kingbase/backup/test1_dir
場景 3:解析歸檔為 SQL 腳本(非直接恢復)
需求:查看
命令:
test1_custom.dump 的恢復內容,并導出為 SQL 腳本,修改后再執行恢復。
# -f:將歸檔解析為 SQL 腳本;不指定 -d,避免直接恢復到數據庫
sys_restore -Fc -U system -f /home/kingbase/backup/restore_sql.sql /home/kingbase/backup/test1_custom.dump
執行效果:
- 生成
restore_sql.sql腳本,包含完整的恢復語句; - 可手動修改腳本(如刪除某張表的恢復語句),再通過
ksql執行:ksql -U system -d test1 -f /home/kingbase/backup/restore_sql.sql
場景 4:查看歸檔內容(避免恢復遺漏)
需求:恢復前確認
命令:
test1_dir 歸檔是否包含 bigtable 表,避免漏恢復關鍵表。
# -l:列出歸檔中的所有對象,輸出到控制臺
sys_restore -Fd -l /home/kingbase/backup/test1_dir
輸出示例:
1; 2615 16384 TABLE public bigtable system
2; 2615 16386 INDEX public bigtable_id_idx system
3; 2615 16388 SEQUENCE public bigtable_id_seq system
- 可通過關鍵字篩選(如
sys_restore -Fd -l /home/kingbase/backup/test1_dir | grep bigtable),快速確認目標表是否存在。
四、關鍵注意事項與運維建議
為確保備份恢復的可靠性,需關注以下細節,避免出現數據丟失或恢復失敗。
1. 備份前準備
- 檢查磁盤空間:備份前通過
df -h確認目標磁盤剩余空間,建議預留 “數據庫大小 1.5 倍” 的空間(尤其是未壓縮的 tar 格式)。 - 驗證用戶權限:
sys_dump需要 “數據庫讀取權限”(如SELECT權限),sys_restore需要 “數據庫寫入權限”(如CREATE、DROP權限),建議使用system超級用戶執行,避免權限不足。
2. 備份后驗證
- 歸檔完整性檢查:對 directory 格式,確認目錄下
toc.dat文件存在且非空;對 custom/tar 格式,通過sys_restore -l驗證是否能正常讀取內容。 - 恢復測試:定期將備份文件恢復到測試環境,驗證數據完整性(如比對表行數、關鍵字段值),避免備份文件損壞卻未發現。
3. 格式選擇建議
不同備份格式適配不同場景,選擇時可參考下表:
| 格式 | 壓縮 | 并行備份 | 靈活恢復 | 跨庫遷移 | 適用場景 |
|---|---|---|---|---|---|
| plain(腳本) | 無 | 不支持 | 不支持(需全量執行) | 支持 | 跨數據庫遷移、簡單環境備份 |
| custom(自定義) | 默認壓縮 | 不支持 | 支持(選表、選數據) | 不支持 | 日常全量備份、應急恢復 |
| directory(目錄) | 默認壓縮 | 支持 | 支持 | 不支持 | 大數據庫備份(10GB+)、并行恢復 |
| tar(歸檔) | 無 | 不支持 | 有限支持 | 不支持 | 磁帶存儲、簡單歸檔備份 |
總結
sys_dump 與 sys_restore 是 KingbaseES 運維的 “黃金組合”:sys_dump 負責 “按需備份”(腳本 / 歸檔、全量 / 增量、數據 / 結構),sys_restore 負責 “精準恢復”(選對象、選內容、解析腳本)。掌握這兩個工具的核心在于 “理解格式差異”—— 腳本格式適合跨庫遷移,歸檔格式適合日常備份與靈活恢復,且需在業務低峰操作、定期驗證備份有效性,才能確保數據庫數據的安全性與可恢復性。
浙公網安備 33010602011771號