数据备份恢复

用户在 SequoiaDB 巨杉数据库的备份恢复操作中,将会使用以下工具:

  • shell 客户端,执行数据库命令
  • sdbrestore 工具,将备份文件恢复成原数据库文件

全量备份

用户可以通过各个数据库驱动程序调用 backup 方法来执行 SequoiaDB 的全量备份功能,以下执行步骤将以 shell 客户端为例进行介绍。

对整个数据库集群执行全量备份

启动 shell,并且连接到协调节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11810 );

对整个数据库集群执行全量备份

  1. > db.backup( { Name: "backupAll", Description: "backup for all" } );

对指定数据分区执行全量备份

1.启动 shell,连接到协调节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11810 );

2.对指定数据分区执行全量备份:

  1. > db.backup( { Name: "backupAll_group1", Description: "backup group1", GroupName: "group1" } );

增量备份

用户执行增量备份依然采用 backup 方法,与全量备份方法唯一区别在于调用 backup 方法时,将 EnsureInc 方法设置为 true 。如果用户希望对整个数据库集群执行增量备份,以 sdb shell 为例,用户可以执行以下命令。

1.启动 shell,并且连接到协调节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11810 );

2.对指定整个数据库集群执行增量备份:

  1. > db.backup( { Name: "backupAll", Description: "increase backup data", EnsureInc: true } );

查看备份信息

查看备份信息参数说明

参数说明
Name备份名称,缺省则查看目录下所有备份信息。
Path查看备份的指定路径,缺省为配置参数“bkuppath”中指定的路径。
GroupName查看指定组的备份信息,缺省为查看全系统备份信息,当需要查看多个组的备份信息可以指定为数组类型,如:[“datagroup1”, “datagroup2”]
Detail是否显示备份的详细信息,缺省为 false

查看整个数据库集群备份信息

1.启动 shell,并且连接到协调节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11810 );

2.执行查看备份信息:

  1. > db.listBackup();
  2. {
  3. "Version": 2,
  4. "Name": "backupAll",
  5. "ID": 0,
  6. "Description": "backup for all",
  7. "NodeName": "sdbserver:11820",
  8. "GroupName": "SYSCatalogGroup",
  9. "EnsureInc": false,
  10. "BeginLSNOffset": -1,
  11. "EndLSNOffset": 7300,
  12. "TransLSNOffset": -1,
  13. "StartTime": "2019-03-05-11:16:33",
  14. "LastLSN": -1,
  15. "LastLSNCode": 0,
  16. "HasError": false
  17. }
  18. {
  19. "Version": 2,
  20. "Name": "backupAll",
  21. "ID": 0,
  22. "Description": "backup for all",
  23. "NodeName": "sdbserver:11840",
  24. "GroupName": "group2",
  25. "EnsureInc": false,
  26. "BeginLSNOffset": -1,
  27. "EndLSNOffset": 392,
  28. "TransLSNOffset": -1,
  29. "StartTime": "2019-03-05-11:16:33",
  30. "LastLSN": -1,
  31. "LastLSNCode": 0,
  32. "HasError": false
  33. }
  34. {
  35. "Version": 2,
  36. "Name": "backupAll",
  37. "ID": 0,
  38. "Description": "backup for all",
  39. "NodeName": "sdbserver:11830",
  40. "GroupName": "group1",
  41. "EnsureInc": false,
  42. "BeginLSNOffset": -1,
  43. "EndLSNOffset": 32,
  44. "TransLSNOffset": -1,
  45. "StartTime": "2019-03-05-11:16:33",
  46. "LastLSN": -1,
  47. "LastLSNCode": 0,
  48. "HasError": false
  49. }

查看指定目录的备份信息

1.启动 shell,连接指定节点,例如 11830 数据节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11830 );

2.查看指定目录的备份信息:

  1. > db.listBackup ( { Path: "/opt/sequoiadb/database/data/11830/bakfile" } );
  2. {
  3. "Version": 2,
  4. "Name": "backupAll",
  5. "ID": 0,
  6. "Description": "backup for all",
  7. "NodeName": "sdbserver:11830",
  8. "GroupName": "group1",
  9. "EnsureInc": false,
  10. "BeginLSNOffset": -1,
  11. "EndLSNOffset": 32,
  12. "TransLSNOffset": -1,
  13. "StartTime": "2019-03-05-11:16:33",
  14. "LastLSN": -1,
  15. "LastLSNCode": 0,
  16. "HasError": false
  17. }

数据恢复

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

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

数据恢复工具 sdbrestore 参数说明

使用 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.启动 shell,并且连接到协调节点:

  1. $ /opt/sequoiadb/bin/sdb
  2. > var db = new Sdb( "localhost", 11810 );

2.停止需要恢复的数据分区,例如停止 “group1” 数据分区:

  1. db.stopRG( "group1" );

3.使用 sdbrestore 工具,将对应备份文件进行恢复,例如恢复 11830 节点的备份文件,备份文件路径为 “/opt/sequoiadb/database/data/11830/bakfile/“,备份名字为 “backupAll”

  1. $ sdbrestore -p /opt/sequoiadb/database/data/11830/bakfile/ -n backupAll
  2. Check sequoiadb(11830) is not running...OK
  3. Begin to init dps logs...
  4. Begin to restore...
  5. Begin to restore data file: /opt/sequoiadb/database/data/11830/bakfile/backupAll.1 ...
  6. Begin to restore su: SYSSTAT.1.data ...
  7. Begin to restore su: SYSSTAT.1.idx ...
  8. Begin to wait repl bucket empty...
  9. *****************************************************
  10. Restore succeed!
  11. *****************************************************

Note:

  • 用户在使用 sdbrestore 恢复工具前,需要先停止对应引擎节点服务。
  • 用户使用 sdbrestore 工具执行数据恢复工作,每次只能恢复一个引擎节点。如果用户需要恢复一个数据分区中多个引擎节点,可以利用数据分区中全量同步功能,也可以直接将已经恢复了的数据文件通过 scp 远程拷贝方式将其恢复到其他引擎节点上。