数据恢复

使用备份的数据恢复当前集群中的节点 或者 恢复到离线数据。

  • 恢复当前集群中的节点:执行数据恢复必须确保该节点对应的数据组已停止运行,数据恢复首先会清空原节点的所有数据和日志,然后从备份的数据中恢复配置、数据和日志。
  • 恢复到离线数据:可以将全量备份和增量备份的数据不断合并成一份与节点内数据完全相同格式的离线数据,可以在原节点故障后使用该离线数据实现快速恢复。

数据恢复工具参数说明

使用 sdbrestore 可以进行数据恢复,以下是 sdbrestore 的常用参数:

参数缩写说明
—bkpath-p备份源数据所在路径。
—increaseid-i需要恢复到第几次增量备份,缺省恢复到最后一次 ( -1 )。
—beginincreaseid-b需要从第几次备份开始恢复,缺省由系统自动计算 ( -1 )。
—bkname-n需要恢复的备份名。
—action-a恢复行为,“restore”表示恢复,“list”表示查看备份信息,缺省为“restore”。
—diaglevel-v恢复工具自身的日志级别,缺省为 WARNING ( 3 )
—skipconf-s是否需要忽略恢复配置,为 true 时不会改成配置文件
—isSelf是否为恢复本节点数据,缺省为“true”;
当取值为“false”时,根据如下参数将数据恢复至指定路径:—dbpath,—confpath,—svcname,—indexpath,—logpath,—diagpath,—bkuppath,—replname,—shardname,—catalogname,—httpname。
—dbpath必须配置,数据文件目录。
—confpath必须配置,配置文件路径, 当 -s true 可缺省。
—svcname必须配置,本地服务名或端口。
—indexpath索引文件目录。
—logpath日志文件目录。
—diagpath诊断日志文件目录。
—auditpath审记日志文件目录。
—bkuppath备份文件目录。
—archivepath日志归档目录。
—lobmetapath大对象元数据文件目录。
—lobpath大对象数据文件目录。
—replname复制通讯服务名或端口。
—shardname分区通讯服务名或端口。
—catalogname编目通讯服务名或端口。
—httpnameREST 服务名或端口。

Note:

如果一个分区组包含多个数据节点,必须停止该组中每个数据节点并进行恢复。如果将备份的数据恢复至非备份数据节点,需要把 —isSelf 设置成 false,同时设置相关的配置参数。

恢复当前集群中节点的数据

  1. 连接到协调节点

    1. $ /opt/sequoiadb/bin/sdb
    2. > var db = new Sdb( "localhost", 11810 )
  2. 得到分区组

    1. > dataRG = db.getRG( "group1" )
  3. 停止分区组

    1. > dataRG.stop()
  4. 通过终端登入相应分区组的数据节点,执行数据恢复。

    1. sdbadmin@hostname1:/opt/sequoiadb> bin/sdbrestore -p database/11820/bakfile -n test_bk
    2. Check sequoiadb(11820) is not running...OK
    3. Begin to clean dps logs...
    4. Begin to clean dms storages...
    5. Begin to init dps logs...
    6. Begin to restore...
    7. Begin to restore data file: 11820/bakfile/test_bk.1 ...
    8. Begin to restore su: test.1.data ...
    9. Begin to restore su: test.1.idx ...
    10. Begin to restore dps logs...
    11. Begin to wait repl bucket empty...
    12. *****************************************************
    13. Restore succeed!
    14. *****************************************************
  5. 到数据节点目录检查文件是否恢复。

    1. sdbadmin@hostname1:/ opt/sequoiadb /database/11820> ls -l
    2. total 299156
    3. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 16:06 bakfile
    4. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 15:48 diaglog
    5. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 17:39 replicalog
    6. -rw-r----- 1 sdbadmin sdbadmin 155254784 Nov 13 17:39 test.1.data
    7. -rw-r----- 1 sdbadmin sdbadmin 151060480 Nov 13 17:39 test.1.idx
  6. 恢复分区组其他节点数据,恢复方式有以下几种:

    1) 删除该分区组中其它数据节点的所有.data 和 .idx 、.lobd、.lobm文件以及replicalog 日志,节点启动后会自行同步数据。

    2) 拷贝恢复节点的所有 .data 和 .idx 、.lobd、.lobm文件拷贝至其它数据节点的数据目录和索引目录下,以及将该节点的所有 replicalog 日志拷贝至其它数据节点的 replicalog 日志目录下。

    3) 将备份文件拷贝至其它数据节点,并通过 sdbrestore 工具恢复。

恢复到离线数据

  1. 准备用于恢复离线数据的目录

    假定目录为: /backupdata/11820

  2. 通过终端登入相应的节点,执行数据恢复。

    1. sdbadmin@hostname1:/opt/sequoiadb> bin/sdbrestore -p database/11820/bakfile -n test_bk -s true --isSelf false --dbpath /backupdata/11820 --svcname 11820
    2. Check sequoiadb(11820) is not running...OK
    3. Begin to clean dps logs...
    4. Begin to clean dms storages...
    5. Begin to init dps logs...
    6. Begin to restore...
    7. Begin to restore data file: 11820/bakfile/test_bk.1 ...
    8. Begin to restore su: test.1.data ...
    9. Begin to restore su: test.1.idx ...
    10. Begin to restore dps logs...
    11. Begin to wait repl bucket empty...
    12. *****************************************************
    13. Restore succeed!
    14. *****************************************************
  3. 到目录检查文件是否恢复。

    1. sdbadmin@hostname1:/backupdata/node1> ls -l
    2. total 299156
    3. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 16:06 bakfile
    4. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 15:48 diaglog
    5. drwxr-xr-x 2 sdbadmin sdbadmin 4096 Nov 13 17:39 replicalog
    6. -rw-r----- 1 sdbadmin sdbadmin 155254784 Nov 13 17:39 test.1.data
    7. -rw-r----- 1 sdbadmin sdbadmin 151060480 Nov 13 17:39 test.1.idx
  4. 可以通过周期性备份 + 周期性恢复,能够实现节点数据的离线同步,在节点故障时快速进行恢复。