备份和还原
定期备份您的 SUSE Manager 安装以防数据丢失。由于 SUSE Manager 依赖于某个数据库以及已安装的程序和配置,因此备份所有安装组件非常重要。本章包含有关需要备份的文件的信息,并介绍如何使用 smdba
工具来管理数据库备份。其中还包含有关在发生系统故障时如何从备份中还原的信息。
无论您使用哪种备份方法,可用空间必须是当前安装使用的空间量的至少三倍。空间不足可能导致备份失败,因此请经常检查可用空间。 |
1. 备份 SUSE Manager
备份 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 的任何目录。
还需要备份您的数据库,此操作可以使用 |
-
重新安装 SUSE Manager Server。有关详细信息,请参见 安装 SUSE Manager 4.3 Server。
-
使用
yast2 susemanager_setup
安装 SUSE Manager Server。有关详细信息,请参见 SUSE Manager Server 设置。 -
使用 SUSE Manager Web UI 或在命令提示符下使用
mgr-sync
工具重新同步您的 SUSE Manager 储存库。您可以选择重新注册产品,或跳过注册和 SSL 证书生成部分。 -
重新安装
/root/ssl-build/rhn-org-httpd-ssl-key-pair-MACHINE_NAME-VER-REL.noarch.rpm
软件包。 -
安排在下次启动
rhn-search
服务时重新创建搜索索引。此命令仅生成调试消息,而不生成错误消息:rhn-search cleanindex
-
检查是否需要还原
/var/spacewalk/packages/
。如果/var/spacewalk/packages/
不在您的备份中,则需要还原它。如果源储存库可用,则您可以通过完整通道同步来还原/var/spacewalk/packages/
:mgr-sync refresh --refresh-channels
2. 使用 smdba 管理数据库
smdba
工具用于管理本地 PostgreSQL 数据库。您可以使用它来备份并还原数据库,以及管理备份。它还可用于检查数据库的状态、执行重启动等管理任务。
smdba
工具仅适用于本地 PostgreSQL 数据库,而不适用于远程访问的数据库或 Oracle 数据库。
admin ALL=(postgres) /usr/bin/smdba |
使用以下命令检查数据库的运行时状态:
smdba db-status
此命令返回 online
或 offline
,例如:
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
工具可直接从命令行运行。我们建议您在安装后立即运行手动数据库备份,或者在对配置进行任何重大更改后运行手动备份。
首次运行 |
-
为备份分配永久存储空间。此示例使用
/var/spacewalk/
中的目录。此目录将成为备份的永久目标,因此请确保您的服务器始终可以访问此目录。 -
在您的备份位置为备份创建一个目录:
以 root 身份运行以下命令:
install -d -o postgres -g postgres -m 700 /var/spacewalk/db-backup
-
确保您对备份位置拥有适当的权限:
chown postgres:postgres /var/spacewalk/db-backup
-
首次创建备份时,请运行
smdba backup-hot
命令并设置enable
选项。这会在指定的目录中创建备份,并根据需要重启动数据库:smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup
此命令将生成调试消息,成功完成时会返回以下输出:
信息:已完成
-
检查
/var/spacewalk/db-backup
目录中是否存在备份文件,确保备份成功。
3.2. 安排自动备份
无需关闭系统即可使用 smdba
执行数据库备份。但是,由于备份是一项大规模操作,因此在运行备份时,数据库性能可能会下降。我们建议您将定期数据库备份安排在低流量时段,以尽量减少中断。
请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过导航到 |
-
为备份创建一个目录并设置适当的权限(以 root 身份):
install -d -m 700 -o postgres -g postgres /var/spacewalk/db-backup
-
打开
/etc/cron.d/db-backup-mgr
(如果该文件不存在,请创建),并在其中添加下面一行内容以创建 cron 作业:0 2 * * * root /usr/bin/smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup
-
定期检查备份目录以确保备份按预期进行。
4. 从备份中还原
发生故障时,可以使用 smdba
工具从备份中还原。
-
关闭数据库:
smdba db-stop
-
启动还原过程并等待它完成:
smdba backup-restore start
-
重启动数据库:
smdba db-start
-
检查 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 表空间 | 大小 (Mb) | 可用 (Mb) | 使用率 ------------+-----------+------------+------ 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 表 | 大小 --------------------------------------+----------- public.all_primary_keys | 0 字节 public.all_tab_columns | 0 字节 public.allserverkeywordsincereboot | 0 字节 public.dblink_pkey_results | 0 字节 public.dual | 8192 字节 public.evr_t | 0 字节 public.log | 32 kB ...
7. 移动数据库
可以将数据库移到另一个位置。例如,在数据库存储空间不足的情况下。
-
SUSE Manager 的默认存储位置是
/var/lib/pgsql/
。如果您想要移动此位置,例如移到/storage/postgres/
,请执行以下操作。 -
在命令提示符下,以 root 身份停止正在运行的数据库:
rcpostgresql stop
关闭正在运行的 spacewalk 服务:
spacewalk-service stop
-
结合
-a、--archive
选项使用cp
复制当前工作目录结构。 例如:cp --archive /var/lib/pgsql/ /storage/postgres/
此命令将
/var/lib/pgsql/
的内容复制到/storage/postgres/pgsql/
。/var/lib/pgsql
目录的内容需保持不变,否则 SUSE Manager 数据库可能会出现异常。您还应该确保有足够的可用磁盘空间。 -
挂载新的数据库目录:
mount /storage/postgres/pgsql
-
切换到新目录并运行以下命令,确保所有权是
postgres:postgres
而不是root:root
:cd /storage/postgres/pgsql/ ls -l
输出:
total 8 drwxr-x--- 4 postgres postgres 47 Jun 2 14:35 ./
-
通过编辑
etc/fstab
将新数据库挂载位置添加到服务器的 fstab。 -
使用以下命令启动数据库:
rcpostgresql start
-
启动 spacewalk 服务:
spacewalk-service start
8. 根分区崩溃后进行恢复
如果您的根分区已崩溃,您可以通过一些额外的步骤重启动 SUSE Manager Server。本节假设您已为数据库和通道使用不同的分区设置了服务器,这两个分区分别挂载在 /var/lib/pgsql
和 /var/spacewalk/
位置。
安装新系统后,大多数用户和组将获得不同的 ID。大多数备份系统会存储名称而不是 ID,并将还原具有正确所有权和权限的文件。但是,如果您挂载现有分区,则必须使所有权与新系统保持一致。 |
-
安装 SUSE Manager。不要挂载
/var/spacewalk
和/var/lib/pgsql
分区。等待安装完成,然后继续下一步。 -
关闭数据库:
rcpostgresql stop
-
关闭服务:
spacewalk-service stop
-
挂载
/var/spacewalk
和/var/lib/pgsql
分区。 -
还原备份 SUSE Manager中列出的目录。
-
启动数据库:
rcpostgresql start
-
启动 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 =