文档中心

日志重放工具

在复制组内,主节点上的写操作会记录到同步日志中,备节点通过同步日志实现与主节点的数据同步。同步日志循环使用磁盘上的日志文件,新产生的日志会覆盖旧的日志,同步日志只能保存最近的部分日志。通过开启日志归档,可以持续归档数据节点的同步日志,归档日志不会被覆盖。通过重新执行在其它集群或节点的日志重放工具,用户可以实现不同集群间的数据同步。

基本功能

日志重放工具主要功能如下:

  • 读取日志并在 SequoiaDB 巨杉数据库上执行重放
  • 根据条件(日志文件、集合空间、集合、操作和LSN)过滤日志进行重放
  • 持续监控归档目录并重放日志
  • 在后台执行日志重放
  • 生成状态文件,重启后继续执行退出前的重放

支持重放的日志操作如下:

操作 说明
insert 插入数据
update 更新数据
delete 删除数据
truncatecl truncate集合

Note:

  • 重放时根据归档文件的FileId从小到大重放
  • 重放出错时重放工具会立即退出,已经重放的日志不会回滚
  • 归档日志LSN不连续时重放工具会报错退出
  • 通过status选项指定状态文件,可以从上次退出的地方继续重放,不指定时每次从第一个归档文件开始重放
  • 未重放的归档日志文件发生了移动操作后,移动文件不会被重放;已重放的归档日志文件发生了移动操作,重放工具会回滚移动文件中的日志操作
  • 不支持回滚truncatecl操作,回滚时遇到truncatecl操作会报错退出
  • 在后台执行时可以通过kill -15 的方式停止进程
  • 复制日志是幂等的,同一条日志多次重放结果不变
  • 归档重放过程中,如果在集合上执行split操作,通过协调节点重放到同一个集群时可能会丢失数据。因为split的源复制组在数据迁移到目标复制组后会删除本地相应数据,并生成删除日志;而目标复制组接收数据后生成插入日志。如果目标复制组的归档日志先被重放而后源复制组的归档日志才被重放,那么迁移的那部分数据重放时先插入后被删除,导致数据丢失。此时可以通过再次重放目标复制组的归档日志来重新插入丢失的数据

参数说明

--help,-h

打印帮助信息

--version,-V

打印版本号

--hostname

SequoiaDB 所在的主机名,dump和dumpheader为false,且outputconf未设置时必填;类型:string

--svcname

SequoiaDB 的服务名(端口号),dump和dumpheader为false,且outputconf未设置时必填;类型:string

--user

用户名;类型:string

--password

密码,指定值则使用明文输入,不指定值则命令行提示输入;类型:string

--cipher

是否使用加密文件的方式输入密码;类型:bool;默认值为:false

--token

加密口令;类型:string

--cipherfile

加密文件;类型:string;默认值为:./passwd

--ssl

是否使用SSL连接;类型:bool;默认值为:false

--path

归档目录,必填,可以是文件或目录;类型:string;

--filter

过滤条件;类型:json格式的string;可以指定如下过滤条件:

  • OP,指定重放的操作,默认为重放工具支持的所有日志操作,类型:array[string]
  • ExclOP,指定排除的操作,优先级高于OP,类型:array[string]
  • MinLSN,指定重放的最小LSN(包括该LSN),类型:int64
  • MaxLSN,指定重放的最大LSN(不包括该LSN),类型:int64
  • File,指定重放的日志文件,默认为全部,类型:array[string]
  • ExclFile,指定排除的日志文件,优先级高于File,类型:array[string]
  • CS,指定重放的集合空间,默认为全部,类型:array[string]
  • ExclCS,指定排除的集合空间,优先级高于CS,类型:array[string]
  • CL,指定重放的集合,集合名的格式为"集合空间.集合名",默认为全部,类型:array[string]
  • ExclCL,指定排除的集合,优先级高于CL,类型:array[string]

--dump

是否只导出但不重放日志;类型:bool;默认值为:false

--dumpheader

是否只导出归档文件头但不重放日志;类型:bool;默认值为:false

--delete

是否删除完成重放的归档日志文件,只删除完整归档文件;类型:bool;默认值为:false

--watch

是否持续监控归档目录并重放日志,path为目录时有效;类型:bool;默认值为:false

--daemon

是否在后台运行,kill -15 可以使后台进程正确退出;类型:bool;默认值为:false

--status

指定状态文件,状态文件会存储重放的状态信息,首次指定时重放工具会生成该文件。重放工具退出后,通过指定状态文件可以从上次退出的地方继续重放;类型:string

--intervalnum

状态文件持久化间隔记录数,每回放intervalnum条记录持久化一次状态文件;类型:number;默认值为:1000

--type

指定日志类型,取值为"archive"表示归档日志,取值为"replica"表示复制日志;类型:string;默认值:archive

示例

  • 指定归档目录下的日志文件 archivelog.1 进行重放:

    $./sdbreplay --hostname sdbserver1 --svcname 11810 --path /data/archivelog/archivelog.1
  • 指定归档目录并过滤集合 sample.employee 的 insert 和 update 操作进行重放:

    $./sdbreplay --hostname sdbserver1 --svcname 11810 --path /data/archivelog --filter '{ "CL": [ "sample.employee" ], "OP": ["insert","update"] }'
  • 在后台持续监控归档目录并重放归档日志文件,同时记录状态:

    $./sdbreplay --hostname sdbserver1 --svcname 11810 --path /data/archivelog --watch true --daemon true --status 1.status
收起

本页导航
回到顶部