数据备份恢复

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

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

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

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

    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 方法时,将 EnsureInc 方法设置为 true 。如果用户希望对整个数据库集群执行增量备份,以 sdb shell 为例,用户可以执行以下命令。

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

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

    查看备份信息参数说明

    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. "EndLSNOffset": 7300,
    11. "TransLSNOffset": -1,
    12. "StartTime": "2019-03-05-11:16:33",
    13. "LastLSN": -1,
    14. "LastLSNCode": 0,
    15. "HasError": false
    16. }
    17. {
    18. "Name": "backupAll",
    19. "ID": 0,
    20. "Description": "backup for all",
    21. "NodeName": "sdbserver:11840",
    22. "GroupName": "group2",
    23. "EnsureInc": false,
    24. "BeginLSNOffset": -1,
    25. "EndLSNOffset": 392,
    26. "TransLSNOffset": -1,
    27. "StartTime": "2019-03-05-11:16:33",
    28. "LastLSN": -1,
    29. "LastLSNCode": 0,
    30. "HasError": false
    31. }
    32. {
    33. "Version": 2,
    34. "Name": "backupAll",
    35. "ID": 0,
    36. "Description": "backup for all",
    37. "NodeName": "sdbserver:11830",
    38. "GroupName": "group1",
    39. "BeginLSNOffset": -1,
    40. "EndLSNOffset": 32,
    41. "TransLSNOffset": -1,
    42. "LastLSN": -1,
    43. "LastLSNCode": 0,
    44. "HasError": false
    45. }

    查看指定目录的备份信息

    1.启动 shell,连接指定节点,例如 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 的常用参数:

    参数缩写说明
    —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 服务名或端口。

    数据恢复步骤

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

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

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

    1. db.stopRG( "group1" );

    Note:

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