4.3.?使用低级API制作基础备份

4.3.1. 制作一个非排他低级备份
4.3.2. 制作一个排他低级备份
4.3.3. 备份数据目录

使用低级API制作一个基础备份的过程比ux_basebackup方法要包含更多的步骤,但操作相对简单。这些步骤要按照顺序执行,并且在执行下一步之前要验证上一步是否成功。

可以用非排他或者排他的方法来制作低级基础备份。推荐非排他方法,而排他的方法已经被废弃并且最终将被移除。

4.3.1.?制作一个非排他低级备份

非排他低级备份允许其他并发备份运行(既包括那些使用同样的备份API开始的备份,也包括那些使用ux_basebackup开始的备份)。

  1. 确保WAL归档被启用且正常工作。

  2. 作为一个具有运行ux_start_backup权限的用户(超级用户,或者被授予权限执行该函数的用户)连接到服务器(任何数据库均可)并且执行命令:

    SELECT ux_start_backup('label', false, false);

    其中label是用来唯一标识这次备份操作的劝拿庞蜗菲教ㄗ⒉嵬锯字符串。调用ux_start_backup的连接必须被保持到备份结束,否则备份将被自动中止。

    默认情况下,ux_start_backup可能需要较长的时间完成。这是因为它会执行一个检查点,并且该检查点所需要的I/O将会花费一段时间,默认情况下是检查点间隔(由配置参数checkpoint_completion_target设置)的一半。默认情况下对查询处理的影响最小。如果想要尽可能快地开始备份,请把第二个参数改成true,这将使用尽可能多的I/O发出即时检查点。

    第三个参数为false会告诉ux_start_backup开始一次非排他基础备份。

  3. 使用文件系统备份工具(例如tar或者cpio,而不是ux_dump或者ux_dumpall)执行备份。此时,不需要停止正常的数据库操作。在这类备份期间需要注意的事项请参见备份数据目录。

  4. 在同一个连接中,执行命令:

    SELECT * FROM ux_stop_backup(false);

    该函数终止备份模式。在主服务器上,将自动切换到下一个WAL段。在备服务器上,无法自动切换WAL段,可以在主服务器上运行ux_switch_wal以执行手动切换。切换的原因是让备份间隔期间写入的最后一个WAL段文件准备归档。

    ux_stop_backup将返回一个具有三个值的行。第二个返回值应该被写入到该备份根目录中名为backup_label的文件。第三个返回值应该被写入到一个名为tablespace_map的文件,除非该域为空。这些文件对该备份正常工作来说是至关重要的,不能被随意修改。

  5. 一旦备份期间活动的WAL段文件被归档,备份就完成了。由ux_stop_backup的第一个返回值标识的文件是构成一个完整备份文件集合所需的最后一个段。在主服务器上,如果archive_mode被启用,并且wait_for_archive参数为true,则最后一个段被归档后ux_stop_backup的结果才会被返回。在备用服务器上,为了使ux_stop_backup等待,archive_mode必须是always。由于已经配置了archive_command,WAL段文件的归档会自动发生。在大部分情况下,这些归档会很快发生,但是建议监控归档系统确保没有延迟。如果归档进程由于归档命令的失败而落后,它将会持续重试直到归档成功并且备份完成。如果希望对ux_stop_backup的执行给出一个时间限制,可以设置一个合适的statement_timeout值,但要注意如果ux_stop_backup因此而中止可能会致使备份失效。

    如果对备份进程监控并确保备份所需的所有WAL段文件已成功归档,则可以将wait_for_archive参数(默认为true)设置为false以使停止备份记录写入WAL,ux_stop_backup立即返回。默认情况下,ux_stop_backup将一直等到所有WAL归档完毕,这可能需要等待一些时间。必须谨慎使用此选项:如果未正确监控WAL归档,则备份可能未包括所有WAL文件,因此将不完整且无法恢复。

4.3.2.?制作一个排他低级备份

一个排他备份的处理绝大部分都和非排他备份相同,但是在一些关键步骤上不同。这种类型的备份只能在主服务器上进行,并且不允许并发备份。

  1. 确保WAL归档被启用且正常工作。

  2. 作为一个具有运行ux_start_backup权限的用户(超级用户,或者被授予权限执行该函数的用户)连接到服务器(任何数据库均可)并且执行命令:

    SELECT ux_start_backup('label');

    其中label是用来唯一标识这次备份操作的劝拿庞蜗菲教ㄗ⒉嵬锯字符串。该函数会在集群目录中创建一个关于备份信息的备份标签文件(也被称为backup_label,其中包括了开始时间和标签字符串)和名为tablespace_map的表空间映射文件(文件包含在ux_tblspc/中一个或者多个表空间符号链接的信息)。如果需要从备份中恢复,这两个文件对于备份的完整性都至关重要。

    默认情况下,ux_start_backup可能需要较长的时间完成。这是因为它会执行一个检查点,并且该检查点所需要的I/O将会花费一段时间,默认情况下是检查点间隔(由配置参数checkpoint_completion_target设置)的一半。默认情况下对查询处理的影响最小。如果你要尽快开始备份,可使用如下命令使检查点尽可能快地被完成:

    SELECT ux_start_backup('label', true);
  3. 使用文件系统备份工具(例如tar或者cpio,而不是ux_dump或者ux_dumpall)执行备份。此时,不需要停止正常的数据库操作。在这类备份期间需要注意的事项请参见备份数据目录

    注意

    如果服务器在备份期间崩溃,从UXDATA目录手动删除backup_label文件后,才可能成功重新启动服务器。

  4. 在同一个连接中,执行命令:

    SELECT ux_stop_backup();

    该函数终止备份模式,并且自动切换到下一个WAL段。进行切换的原因是使在备份期间生成的最新WAL段可归档。

  5. 一旦备份期间活动的WAL段文件被归档,备份就完成了。由ux_stop_backup的返回值标识的文件是构成一个完整备份文件集合所需的最后一个段。如果archive_mode被启用,则最后一个段被归档后ux_stop_backup的结果才会被返回。在备用服务器上,为了使ux_stop_backup等待,archive_mode必须是always。由于已经配置了archive_command,WAL段文件的归档就会自动发生。在大部分情况下,这些归档会很快发生,但是建议监控归档系统确保没有延迟。如果归档进程由于归档命令的失败而落后,它将会持续重试直到归档成功并且备份完成。如果希望对ux_stop_backup的执行给出一个时间限制,可以设置一个合适的statement_timeout值,但要注意如果ux_stop_backup因此而中止可能会致使备份失效。

4.3.3.?备份数据目录

如果被拷贝的文件在拷贝过程中发生变化,某些文件系统备份工具会发出警告或错误。在建立一个活跃数据库的基础备份时,这种情况是正常的,并非一个错误。此时,需要确保能够区分它们和真正的错误。例如,某些版本的rsync为“消失的源文件”返回一个独立的退出码,可以编写一个驱动脚本将该退出码作为一种非错误情况接受。同样,如果一个文件在被tar复制的过程中被截断,某些版本的GNU tar会返回一个与致命错误无法区分的错误代码。幸运的是,如果一个文件在备份期间被改变,版本为1.16及其后的GNU tar将会退出并返回1,而对于其他错误返回2。在版本1.23及其后的GNU tar中,可以使用警告选项--warning=no-file-changed --warning=no-file-removed来隐藏相关的警告消息。

确认备份包含数据库集群目录(例如/home/uxdb/uxdbinstall/dbsql/bin/uxdblocal)下的所有文件。如果使用了不在此目录下的表空间,注意也把它们包括在内(并且确保备份将符号链接归档为链接,否则恢复过程将破坏表空间)。

从基础备份中移除集群的ux_wal/子目录中的文件,这种微小的调整是必要的,因为它降低了恢复时的错误风险。也可以移除uxmaster.pid和uxmaster.opts,它们记录了关于uxmaster运行的信息,但与最终使用这个备份的uxmaster无关(这些文件可能会使ux_ctl搞混淆)。

从基础备份中移除集群的ux_replslot/子目录中的文件也是个好主意,这样主控机上存在的复制槽不会成为备份的一部分。否则,后续用该备份创建一个后备机可能会导致该后备机上的WAL文件被无限期保留;并且在启用了热后备反馈的情况下可能导致主控机膨胀,因为使用那些复制槽的客户端将继续连接到主控机(而不是后备机)并且继续更新复制槽。即使该备份是要被用来创建一个新的主控机,拷贝复制槽也不是特别有用,因为这些槽的内容在新主控机上线时很可能已经过时。

ux_dynshmem/、ux_notify/、ux_serial/、ux_snapshots/、ux_stat_tmp/和ux_subtrans/目录的内容(但不是目录本身)可以从备份中省略,因为它们将在uxmaster启动时初始化。如果设置了stats_temp_directory并且是在数据目录下,那么也可以省略该目录的内容。

任喊拿庞蜗菲教ㄗ⒉嵬驹uxsql_tmp开头的文件或目录都可以从备份中省略。这些文件在uxmaster启动时被删除,并且根据需要重新创建目录。

备份标签文件包含指定给ux_start_backup的标签字符串,以及ux_start_backup被运行的时刻和起始WAL文件的名称。在发生混乱的情况下就可以在备份文件中查看并准确地决定该转储文件来自于哪个备份会话。表空间映射文件包括存在于目录ux_tblspc/中的符号链接名称以及每一个符号链接的完整路径。这些文件不仅是为了提供参考,它们的存在和内容对于系统恢复过程的正确操作至关重要。

在服务器停止时也可以创建一个备份。在这种情况下,显然不能使用ux_start_backup或ux_stop_backup,因此只能用户自身跟踪备份,以及相关WAL文件应该追溯到多久以前。通常最好遵循上面的连续归档过程。

XML 地图 | Sitemap 地图