在复制组内,主节点上的写操作会记录到同步日志中,备节点通过同步日志实现与主节点的数据同步。同步日志循环使用磁盘上的日志文件,新产生的日志会覆盖旧的日志,同步日志只能保存最近的部分日志。通过开启日志归档,可以持续归档数据节点的同步日志,归档日志不会被覆盖。通过重新执行在其它集群或节点的日志重放工具,用户可以实现不同集群间的数据同步。
日志重放工具主要功能如下:
支持重放的日志操作如下:
操作 | 说明 |
---|---|
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;可以指定如下过滤条件:
--dump
是否只导出但不重放日志;类型:bool;默认值为:false
--dumpheader
是否只导出归档文件头但不重放日志;类型:bool;默认值为:false
--delete
是否删除完成重放的归档日志文件,只删除完整归档文件;类型:bool;默认值为:false
--watch
是否持续监控归档目录并重放日志,path为目录时有效;类型:bool;默认值为:false
--daemon
是否在后台运行,kill -15
--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