4.4.?连续归档备份恢复

从连续归档备份进行恢复。过程如下:

  1. 如果服务器仍在运行,首先停止服务器。

  2. 如果空间足够,将整个集群数据目录和表空间复制到一个临时位置,稍后可能用到它们。注意这种预防措施要求系统有足够的空闲空间来保留现有数据库的两份拷贝。如果没有足够的空间,至少要拷贝集群的ux_wal子目录的内容,因为它可能包含系统停止之前还未被归档的日志。

  3. 移除所有位于集群数据目录和正在使用的表空间根目录下的文件和子目录。

  4. 从文件系统备份中恢复数据库文件。注意使用正确的系统用户恢复(数据库系统用户,而不是root)并且使用正确的权限。如果使用表空间,应该验证ux_tblspc/中的符号链接被正确地恢复。

  5. 移除ux_wal/中的所有文件,这些是来自于文件系统备份而不是当前日志,因此可以被忽略。如果根本没有归档ux_wal/,那么以正确的权限重建它。注意如果以前它是一个符号链接,请确保以同样的方式进行重建。

  6. 如果有第2步中保存的未归档WAL段文件,把它们拷贝到ux_wal/(最好是拷贝而不是移动,这样如果在开始恢复后出现问题仍然有未修改的文件)。

  7. 临时修改ux_hba.conf,阻止普通用户在成功恢复之前连接。

  8. 启动服务器。服务器将会进入到恢复模式进而根据需要读取归档WAL文件。恢复可能因为一个外部错误而被终止,可以重新启动服务器,这样它将继续恢复。

  9. 检查数据库的内容来确保已经恢复到了期望的状态。如果没有,返回到第1步。如果一切正常,通过恢复ux_hba.conf允许普通用户连接。

所有这些的关键部分是设置恢复配置命令,它描述将如何恢复以及恢复要运行到什么程度,在uxsinodb.conf中指定restore_command,告诉UXDB如何获取归档WAL文件段。与archive_command相似,这也是一个shell命令字符串。它可以包含%f(被日志文件名替换)和%p(将被日志文件被拷贝的目标路径名替换)。(路径名是相对于当前工作目录的,即集群的数据目录)。如果需要在命令中嵌入一个真正的%字符,可以写成%%。最简单的命令如下:

restore_command = 'cp /home/uxdb/uxdbinstall/dbsql/bin/archivedir/%f %p'

它将从目录/home/uxdb/uxdbinstall/dbsql/bin/archivedir中拷贝之前归档的WAL段。当然,可以使用更复杂的shell脚本,例如一个要求操作者装载合适磁带的shell脚本。

命令失败将返回非零退出状态。命令被调用请求存档中不存在的文件而返回非零的情况不属于错误情况。恢复失败的一种例外是该命令被一个信号(被用作数据库服务器关闭动作的一部分,除了SIGTERM)终止或者被shell的错误(例如命令未找到)终止,那样恢复将中止并且服务器将不会启动。

并非所有被请求的文件都是WAL段文件,也许还会请求一些.backup或.history后缀的文件。还要注意的是,%p路径的基本名字和%f不同,不可以互换。

归档中找不到的WAL段可以在ux_wal/中找到,这使得可以使用最近未归档的段。但是,在归档中可用的段优先于ux_wal/中的文件被使用。

通常,恢复将会处理完所有可用的WAL段,从而将数据库恢复到当前时间点(或者尽可能接近给定的可用WAL段)。因此,一个正常的恢复将会以一个“文件未找到”消息结束,错误消息的准确文本取决于用户设置的restore_command。也可能在恢复的开始看到一个针对名称类似于00000001.history文件的错误消息,这也是正常的,对此情况的讨论见时间线。

如果希望恢复到之前的某个时间点(例如,恢复到DBA删除主事务表之前),只需要在uxsinodb.conf中指定要求的停止点。可以使用日期/时间、特定恢复点或指定事务ID完成时间来定义停止点(也被称为“恢复目标”)。在这种写法中,只有日期/时间和特定恢复点选项非常有用,因为没有工具可以准确地确定要用哪个事务ID。

注意

停止点必须位于基础备份的完成时间之后,即ux_stop_backup的完成时间。不能使用基本备份恢复到备份正在进行时的状态(要恢复到这样的时间,必须返回到以前的基本备份点并从那里向前恢复)。

如果恢复找到被破坏的WAL数据,恢复将会停止于该点并且服务器不会启动。在这种情况下,恢复进程需要从开头重新开始运行,并指定一个在损坏点之前的“恢复目标”以便恢复能够正常完成。如果恢复由于一个外部原因失败,例如一个系统崩溃或者WAL归档变为不可访问,可以重启服务器并且该次恢复将会从上次失败的地方继续。恢复重启的工作方式与正常操作中的检查点非常相似:服务器周期性地强制把它的所有状态写到磁盘中,然后更新ux_control文件以表明已经处理的WAL数据无需再次扫描。

XML 地图 | Sitemap 地图