金仓数据库KingbaseES服务器应用参考手册--8. sys_rewind

8.1. 简介:

sys_rewind— 把一个KingbaseES数据目录与另一个从该目录中复制出来的数据目录同步

sys_rewind是用于在集簇的时间线分叉以后,同步一个 KingbaseES集簇和同一集簇的另一份拷贝的工具。一种典型的场景是让一个故障后的旧主服务器重新上线为一个备服务器,并且使该备机跟随新的主机。

其结果等效于把目标数据目录替换成源数据目录。关系文件中只有更改过的块才会被拷贝,所有其他的文件会被整个拷贝,包括配置文件。

sys_rewind比起做一个新的基础备份或者rsync等工具的优势在于, sys_rewind不要求通读集簇中未更改的块。这使得它在数据库很大并且在集簇间只有小部分块不同时速度很快。

sys_rewind检查源集簇和目标集簇的时间线历史来判断它们在哪一点分叉,并且期望在目标集簇的sys_wal目录中找到 WAL来返回到分叉点。

分叉点可能会在目标时间线、源时间线或者它们的共同祖先上找到。在典型的失效场景中,目标集簇在分叉后很快就被关闭,这不是问题,但是如果目标集簇在分叉后已经运行了很长时间,旧的 WAL 文件可能已经不存在了。

在这样的情况下,它们可以被手工从WAL 归档复制到sys_wal目录,或者通过配置 primary_conninfo 或 restore_command 在启动时取得。

sys_rewind的使用并不限于失效的场景,例如一个后备服务器可能被提升、运行一些写事务,然后被倒回再次成为一个后备。当目标服务器在运行了 sys_rewind之后第一次启动时,它将进入到恢复模式并且重放源服务器在分叉点之后产生的所有 WAL。

当 sys_rewind被运行时有某些 WAL 在源服务器上不可用,并且因此无法被 sys_rewind会话所复制,则在目标服务器被启动时必须让 这些 WAL可用。

这可以通过在目标数据目录中创建一个recovery.signal文件以及在kingbase.conf中配置合适的 restore_command 来实现。

sys_rewind要求目标服务器在kingbase.conf中启用了 wal_log_hints 选项,或者在用initdb初始化集簇时启用了数据校验。目前默认情况下这两者都没有被打开。full_page_writes 也必须被设置为on,这是默认的。

警告

如果在处理时 sys_rewind失败,则目标的数据目录很可能不在可恢复的状态。在这种情况下,推荐创建一个新的备份。

如果 sys_rewind发现它无法直接写入的文件,它将立刻失败。例如当源服务器和目标服务器为只读的SSL密钥及证书使用相同的文件映射,就会发生这种情况。如果在目标服务器上存在这样的文件,推荐在运行 sys_rewind之前移除它们。

在做了rewind之后,一些那样的文件可能已经被从源服务器拷贝,这样就有必要移除已经拷贝的数据并且恢复到rewind之前使用的链接集合。

如果一个数据库通过 sys_rewind进行了恢复,在数据库没有启动的情况下,不能再次通过 sys_rewind进行恢复。

8.2. 命令行参数:

sys_rewind [option...] { -D | --target-kingbase_data } directory { --source-kingbase_data=directory | --source-server=connstr }

8.3. 参数说明:

sys_rewind接受下列命令行参数:

-D directory

--target-kingbase_data=directory

这个选项指定要与源数据目录同步的目标数据目录。在运行 sys_rewind之前目标服务器必须被干净地关闭。

--source-kingbase_data=directory

指定要和目标服务器同步的源服务器的数据目录的文件系统路径。这个选项要求源服务器必须被干净地关闭。

--source-server=connstr

指定一个 libkci 连接串用于连接要与目标服务器同步的源 KingbaseES服务器。 该连接必须是正常的(非复制的)连接,其角色具有足够的权限来执行源服务器上 sys_rewind的使用功能或超级用户角色。此选项要求源服务器处于运行状态,且不处于恢复模式。

-n

--dry-run

做除了实际修改目标目录之外的其他所有事情。

-N

--no-sync

默认情况下,sys_rewind将等待所有文件安全写入磁盘。这个选项会导致sys_rewind不需要等待就返回,这样会更快,但是这意味着后续的操作系统崩溃会导致同步数据目录损坏。通常,此选项对测试很有用,但在创建生产安装时不应使用。

-P

--progress

启用进度报告。在从源集簇拷贝数据时,打开这个选项将会发送一个近似的进度报告。

--debug

打印冗长的调试输出,这主要对于调试 sys_rewind的开发者有用。

-V

--version

显示版本信息然后退出。

-?

--help

显示帮助然后退出。

8.4. 环境变量:

在使用--source-server选项时, sys_rewind也使用libkci支持的环境变量。

环境变量SYS_COLOR指定是否在诊断消息中使用颜色。可能的值是alwaysautonever.

8.5. 错误信息诊断:

8.6. 备注:

当使用集群主机作为源执行 sys_rewind时,可以使用具有足够权限的用户来执行 sys_rewind,而不是超级用户。下面是如何创建一个名为rewind_user的用户:

CREATE USER rewind_user LOGIN;
GRANT EXECUTE ON function sys_catalog.sys_ls_dir(text, boolean, boolean) TO rewind_user;
GRANT EXECUTE ON function sys_catalog.sys_stat_file(text, boolean) TO rewind_user;
GRANT EXECUTE ON function sys_catalog.sys_read_binary_file(text) TO rewind_user;
GRANT EXECUTE ON function sys_catalog.sys_read_binary_file(text, bigint, bigint, boolean) TO rewind_user;

当使用集群主机作为源执行 sys_rewind时,有必要在执行完成后执行CHECKPOINT,其控制文件反映了最新的时间线信息。

8.6.1. 如何工作:

其基本思想是从源集簇拷贝所有文件系统级别的改变到目标集簇:

  1. 以源集簇的时间线历史从目标集簇分叉出来的点之前的最后一个检查点为起点,扫描目标集簇的 WAL 日志。对于每一个 WAL 记录,读取每一个更改过的数据块。这会得到在目标集簇中从源集簇被分支出去以后所有更改过的数据块列表。

  2. 使用直接的文件系统访问(--source-kingbase_data)或者 SQL(--source-server),把所有那些更改过的块从源集簇拷贝到目标集簇。

  3. 把所有其他诸如sys_xact和配置文件(除了关系文件之外所有的东西)从源集簇拷贝到目标集簇。与基础备份类似,在从源集簇拷贝的数据中,目录sys_dynshmem/sys_notify/sys_replslot/sys_serial/sys_snapshots/sys_stat_tmp/以及sys_subtrans/的内容会被忽略。任何以kingbase_tmp开始的文件或目录都会被忽略,backup_labeltablespace_mapsys_internal.initkingbase.opts以及kingbase.pid也是这样。

  4. 从源集簇应用 WAL,从失效处创建的检查点开始(严格来说, sys_rewind并不应用 WAL,它只是创建一个备份标签文件,该文件让KingbaseES从那个检查点开始向前重放所有 WAL)。

8.7. 参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值