SequoiaDB 简介
快速入门
安装部署
数据库实例
分布式引擎
SAC 管控中心
SequoiaPerf 性能分析工具
参考手册
常见问题及解答(FAQ)
版本信息
primaryRestore - 根据保存的主节点信息恢复复制组的主节点
SdbDC.primaryRestore(<planobjOrFile>, [option])
SdbDC
该函数用于根据 primarySave() 保存的主节点信息,恢复各复制组的主节点。可以传入 primarySave 返回的 BSON 对象、普通 JSON 对象或保存结果的文件路径。
planobjOrFile( object | BSONObj | string,必填 )
指定主节点恢复计划,支持以下类型:
option( object,选填 )
通过参数 option 可以过滤需要恢复的数据组,以及指定选主的额外参数:
HostName( string ):按主机名过滤,仅恢复 PrimaryNode 所在主机名匹配的数据组
格式:HostName: "sdbserver"
Domain( string | array ):按域过滤,仅恢复属于指定域的数据组。可以指定单个域名或域名数组
格式:Domain: "mydomain" 或 Domain: ["domain1", "domain2"]
Seconds( number ):选举的超时时间,默认值为 30,单位为秒
格式:Seconds: 60
Level( number ):重选举等待级别,取值:[1, 3],默认为 3
格式:Level: 3
Note:
- planobjOrFile 中必须包含有效的 Detail 数组,每个元素需包含 GroupName 和 PrimaryNode 字段。
- PrimaryNode 的格式为 hostname:svcname,函数会解析出 HostName 和 ServiceName 用于 reelect 操作。
- 如果 Detail 中某个条目的 GroupName 或 PrimaryNode 缺失,该条目将被跳过。
- HostName 过滤基于 PrimaryNode 中的主机名进行匹配;Domain 过滤基于数据组所属的域进行匹配。
函数执行成功时,返回一个 BSON 对象,包含以下字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| MatchedNum | number | 过滤后匹配的复制组数量 |
| SucceedNum | number | 成功恢复主节点的复制组数量 |
| IgnoredNum | number | 被忽略的复制组数量(主节点未发生变化) |
| FailedNum | number | 恢复失败的复制组数量 |
| FailedGroups | array | 恢复失败的复制组名称列表(当 FailedNum > 0 时返回) |
函数执行失败时,将抛异常并输出错误信息。
primaryRestore() 函数常见异常如下:
| 错误码 | 错误类型 | 可能发生的原因 | 解决办法 |
|---|---|---|---|
| -6 | SDB_INVALIDARG | 参数类型错误或缺少 Detail 字段 | 检查参数类型是否正确,确认对象中包含有效的 Detail 数组 |
当异常抛出时,可以通过 getLastErrMsg() 获取错误信息或通过 getLastError() 获取错误码。更多错误处理可以参考常见错误处理指南。
v5.8.6 及以上版本
示例1: 使用 primarySave 返回的对象恢复主节点
> var dc = db.getDC()
> var result = dc.primarySave({HostName: "sdbserver"})
> dc.primaryRestore(result)
{
"MatchedNum": 3,
"SucceedNum": 2,
"IgnoredNum": 1,
"FailedNum": 0
}
示例2: 从文件中恢复主节点
> var dc = db.getDC()
> dc.primarySave(null, "/tmp/primary.json")
> dc.primaryRestore("/tmp/primary.json")
{
"MatchedNum": 4,
"SucceedNum": 4,
"IgnoredNum": 0,
"FailedNum": 0
}
示例3: 指定选主参数进行恢复
> var dc = db.getDC()
> dc.primaryRestore("/tmp/primary.json", {Seconds: 60, Level: 1})
{
"MatchedNum": 3,
"SucceedNum": 3,
"IgnoredNum": 0,
"FailedNum": 0
}
示例4: 按主机名过滤,仅恢复指定主机上的数据组
> var dc = db.getDC()
> dc.primaryRestore("/tmp/primary.json", {HostName: "sdbserver1"})
{
"MatchedNum": 2,
"SucceedNum": 2,
"IgnoredNum": 0,
"FailedNum": 0
}
示例5: 按域过滤,仅恢复指定域中的数据组
> var dc = db.getDC()
> dc.primaryRestore("/tmp/primary.json", {Domain: "mydomain"})
{
"MatchedNum": 2,
"SucceedNum": 2,
"IgnoredNum": 0,
"FailedNum": 0
}
示例6: 恢复时部分复制组失败的情况
> var dc = db.getDC()
> dc.primaryRestore("/tmp/primary.json")
{
"MatchedNum": 4,
"SucceedNum": 2,
"IgnoredNum": 0,
"FailedNum": 2,
"FailedGroups": ["db3", "db4"]
}
展开