备份和还原

定期备份您的 SUSE Manager 安装以防数据丢失。由于 SUSE Manager 依赖于某个数据库以及已安装的程序和配置,因此备份所有安装组件非常重要。本章包含有关需要备份的文件的信息,并介绍如何使用 smdba 工具来管理数据库备份。其中还包含有关在发生系统故障时如何从备份中还原的信息。

无论您使用哪种备份方法,可用空间必须是当前安装使用的空间量的至少三倍。空间不足可能导致备份失败,因此请经常检查可用空间。

1. 备份 SUSE Manager

备份 SUSE Manager 安装的最完整方法是备份相关文件和目录。这可以节省备份管理时间,并且在发生故障时可以更快地重新安装和重新同步。但是,这种方法需要大量磁盘空间,并且可能需要很长时间才能完成备份。

如果您只想备份所需的文件和目录,请使用以下列表。为使此过程更简单、更完整,我们建议备份整个 /etc/root 目录,而不仅仅是此处指定的目录。某些文件仅在您实际使用相关 SUSE Manager 功能时才存在。

  • /etc/cobbler/

  • /etc/dhcp.conf

  • /etc/fstab 和所需的任何 ISO 挂载点。

    如果您的 UUID 已更改,请确保已相应地更新 fstab 项。

  • /etc/rhn/

  • /etc/salt

  • /etc/sudoers

  • /etc/sysconfig/rhn/

  • /root/.gnupg/

  • /root/.ssh

    如果您使用 SSH 隧道或 SSH push,则此文件存在。此外,必须已保存 id-susemanager 键的副本。

  • /root/ssl-build/

  • /srv/formula_metadata

  • /srv/pillar

  • /srv/salt

  • /srv/susemanager

  • /srv/tftpboot/

  • /srv/www/cobbler

  • /srv/www/htdocs/pub/

  • /srv/www/os-images

  • /var/cache/rhn

  • /var/cache/salt

  • /var/lib/cobbler/

  • /var/lib/cobbler/templates/(在 4.0 版之前为 /var/lib/rhn/kickstarts/

  • /var/lib/Kiwi

  • /var/lib/rhn/

  • /var/run/pgsql/

  • /var/lib/salt/

  • /var/run/salt/

  • /var/spacewalk/

  • 包含自定义数据(例如脚本、Kickstart 或 AutoYaST 配置文件)和自定义 RPM 的任何目录。

还需要备份您的数据库,此操作可以使用 smdba 工具来完成。

过程:从手动备份中还原
  1. 重新安装 SUSE Manager Server。有关详细信息,请参见 安装 SUSE Manager 4.3 Server

  2. 使用 yast2 susemanager_setup 安装 SUSE Manager Server。有关详细信息,请参见 SUSE Manager Server 设置

  3. 使用 SUSE Manager Web UI 或在命令提示符下使用 mgr-sync 工具重新同步您的 SUSE Manager 储存库。您可以选择重新注册产品,或跳过注册和 SSL 证书生成部分。

  4. 重新安装 /root/ssl-build/rhn-org-httpd-ssl-key-pair-MACHINE_NAME-VER-REL.noarch.rpm 软件包。

  5. 安排在下次启动 rhn-search 服务时重新创建搜索索引。此命令仅生成调试消息,而不生成错误消息:

    rhn-search cleanindex
  6. 检查是否需要还原 /var/spacewalk/packages/。如果 /var/spacewalk/packages/ 不在您的备份中,则需要还原它。如果源储存库可用,则您可以通过完整通道同步来还原 /var/spacewalk/packages/

    mgr-sync refresh --refresh-channels

2. 使用 smdba 管理数据库

smdba 工具用于管理本地 PostgreSQL 数据库。您可以使用它来备份并还原数据库,以及管理备份。它还可用于检查数据库的状态、执行重启动等管理任务。

smdba 工具仅适用于本地 PostgreSQL 数据库,而不适用于远程访问的数据库或 Oracle 数据库。

smdba 工具需要 sudo 访问权限,以便能够执行系统更改。在开始之前,请通过检查 /etc/sudoers 文件中的下面一行,来确保为 admin 用户启用了 sudo 访问权限:

admin   ALL=(postgres) /usr/bin/smdba

使用以下命令检查数据库的运行时状态:

smdba db-status

此命令返回 onlineoffline,例如:

Checking database core...       online

可使用以下命令启动和停止数据库:

smdba db-start

smdba db-stop

3. 使用 smdba 备份数据库

smdba 工具执行连续存档备份。这种备份方法将合并当前会话期间对数据库所做和每项更改的日志,以及一系列较传统的备份文件。发生崩溃时,首先会从磁盘上和最近备份文件中还原数据库状态,然后精确重放当前会话的日志,使数据库恢复到当前状态。smdba 连续存档备份是在数据库正在运行的情况下执行的,因此无需停机。

这种备份方法非常稳定,通常会创建一致的快照,但可能会占用大量存储空间。请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过导航到 /var/lib/pgsql/ 并运行 df -h 来检查当前数据库大小。

smdba 工具还可以管理存档,仅保留最近的备份和当前日志存档。日志文件的最大文件为 16 MB,因此,当文件达到此大小时会创建一个新日志文件。每次创建新备份时,会清除以前的备份以释放磁盘空间。我们建议您使用 cron 来安排 smdba 备份以确保您的存储得到有效管理,并随时准备好一个备份,以防发生故障。

3.1. 执行手动数据库备份

smdba 工具可直接从命令行运行。我们建议您在安装后立即运行手动数据库备份,或者在对配置进行任何重大更改后运行手动备份。

首次运行 smdba 或者更改了备份位置时,需要先重启动数据库,然后再执行存档。这会导致短暂的停机。定期数据库备份完全不需要停机。

过程:执行手动数据库备份
  1. 为备份分配永久存储空间。此示例使用 /var/spacewalk/ 中的目录。此目录将成为备份的永久目标,因此请确保您的服务器始终可以访问此目录。

  2. 在您的备份位置为备份创建一个目录:

    以 root 身份运行以下命令:

    install -d -o postgres -g postgres -m 700 /var/spacewalk/db-backup
  3. 确保您对备份位置拥有适当的权限:

    chown postgres:postgres /var/spacewalk/db-backup
  4. 首次创建备份时,请运行 smdba backup-hot 命令并设置 enable 选项。这会在指定的目录中创建备份,并根据需要重启动数据库:

    smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup

    此命令将生成调试消息,成功完成时会返回以下输出:

    INFO: Finished
  5. 检查 /var/spacewalk/db-backup 目录中是否存在备份文件,确保备份成功。

3.2. 安排自动备份

无需关闭系统即可使用 smdba 执行数据库备份。但是,由于备份是一项大规模操作,因此在运行备份时,数据库性能可能会下降。我们建议您将定期数据库备份安排在低流量时段,以尽量减少中断。

请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过导航到 /var/lib/pgsql/ 并运行 df -h 来检查当前数据库大小。

过程:安排自动备份
  1. 为备份创建一个目录并设置适当的权限(以 root 身份):

    install -d -m 700 -o postgres -g postgres /var/spacewalk/db-backup
  2. 打开 /etc/cron.d/db-backup-mgr(如果该文件不存在,请创建),并在其中添加下面一行内容以创建 cron 作业:

    0 2 * * * root /usr/bin/smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup
  3. 定期检查备份目录以确保备份按预期进行。

4. 从备份中还原

发生故障时,可以使用 smdba 工具从备份中还原。

过程:从备份中还原
  1. 关闭数据库:

    smdba db-stop
  2. 启动还原过程并等待它完成:

    smdba backup-restore start
  3. 重启动数据库:

    smdba db-start
  4. 检查 RPM 和数据库之间是否有差异。

    spacewalk-data-fsck

5. 存档日志设置

数据库管理工具 smdba 可以通过存档日志记录来执行热备份。在包含嵌入式数据库的 SUSE Manager 中,默认已启用存档日志记录。

PostgreSQL 维护有限数量的存档日志。在使用默认配置的情况下,大约可以存储 64 个大小为 16 MiB 的文件。

创建用户并同步通道:

  • SLES12-SP2-Pool-x86_64

  • SLES12-SP2-Updates-x86_64

  • SLE-Manager-Tools12-Pool-x86_64-SP2

  • SLE-Manager-Tools12-Updates-x86_64-SP2

PostgreSQL 会额外生成大约 1 GB 数据。因此,请务必考虑备份策略并定期创建备份。

存档日志存储在 /var/lib/pgsql/data/pg_xlog/ (postgresql) 中。

6. 检索有关占用的数据库空间的概览

数据库管理员可以使用子命令 space-overview 来获取有关占用的表空间的报告,例如:

smdba space-overview

输出:

SUSE Manager Database Control. Version 1.5.2
Copyright (c) 2012 by SUSE Linux Products GmbH

Tablespace  | Size (Mb) | Avail (Mb) | Use %
------------+-----------+------------+------
postgres    | 7         | 49168      | 0.013
susemanager | 776       | 48399      | 1.602

smdba 命令适用于 PostgreSQL。如需更详细的报告,请使用 space-tables 子命令。它可以列出表及其大小,例如:

smdba space-tables

输出:

SUSE Manager Database Control. Version 1.5.2
Copyright (c) 2012 by SUSE Linux Products GmbH

Table                                 | Size
--------------------------------------+-----------
public.all_primary_keys               | 0 bytes
public.all_tab_columns                | 0 bytes
public.allserverkeywordsincereboot    | 0 bytes
public.dblink_pkey_results            | 0 bytes
public.dual                           | 8192 bytes
public.evr_t                          | 0 bytes
public.log                            | 32 kB
...

7. 移动数据库

可以将数据库移到另一个位置。例如,在数据库存储空间不足的情况下。

过程:移动数据库
  1. SUSE Manager 的默认存储位置是 /var/lib/pgsql/。如果您想要移动此位置,例如移到 /storage/postgres/,请执行以下操作。

  2. 在命令提示符下,以 root 身份停止正在运行的数据库:

    rcpostgresql stop

    关闭正在运行的 spacewalk 服务:

    spacewalk-service stop
  3. 结合 -a、--archive 选项使用 cp 复制当前工作目录结构。 例如:

    cp --archive /var/lib/pgsql/ /storage/postgres/

    此命令将 /var/lib/pgsql/ 的内容复制到 /storage/postgres/pgsql/

    /var/lib/pgsql 目录的内容需保持不变,否则 SUSE Manager 数据库可能会出现异常。您还应该确保有足够的可用磁盘空间。
  4. 挂载新的数据库目录:

    mount /storage/postgres/pgsql
  5. 切换到新目录并运行以下命令,确保所有权是 postgres:postgres 而不是 root:root

    cd /storage/postgres/pgsql/
    ls -l

    输出:

    total 8
    drwxr-x---  4 postgres postgres   47 Jun  2 14:35 ./
  6. 通过编辑 etc/fstab 将新数据库挂载位置添加到服务器的 fstab。

  7. 使用以下命令启动数据库:

    rcpostgresql start
  8. 启动 spacewalk 服务:

    spacewalk-service start

8. 根分区崩溃后进行恢复

如果您的根分区已崩溃,您可以通过一些额外的步骤重启动 SUSE Manager Server。本节假设您已为数据库和通道使用不同的分区设置了服务器,这两个分区分别挂载在 /var/lib/pgsql/var/spacewalk/ 位置。

安装新系统后,大多数用户和组将获得不同的 ID。大多数备份系统会存储名称而不是 ID,并将还原具有正确所有权和权限的文件。但是,如果您挂载现有分区,则必须使所有权与新系统保持一致。

过程:根分区崩溃后进行恢复
  1. 安装 SUSE Manager。不要挂载 /var/spacewalk/var/lib/pgsql 分区。等待安装完成,然后继续下一步。

  2. 关闭数据库:

    rcpostgresql stop
  3. 关闭服务:

    spacewalk-service stop
  4. 挂载 /var/spacewalk/var/lib/pgsql 分区。

  5. 还原备份 SUSE Manager中列出的目录。

  6. 启动数据库:

    rcpostgresql start
  7. 启动 spacewalk 服务:

    spacewalk-service start

SUSE Manager 现在应该可以正常运行,而不会丢失数据库或已同步的通道。

9. 数据库连接信息

可以通过在 /etc/rhn/rhn.conf 中添加或编辑以下变量来设置 SUSE Manager 数据库连接信息:

db_backend = postgresql
db_user = susemanager
db_password = susemanager
db_name = susemanager
db_host = localhost
db_port = 5432
db_ssl_enabled =