备份和还原
定期备份您的 SUSE Multi-Linux Manager 安装以防数据丢失。由于 SUSE Multi-Linux Manager 依赖于某个数据库以及已安装的程序和配置,因此备份所有安装组件非常重要。本章包含有关需要备份的文件的信息,并介绍如何使用 smdba
工具来管理数据库备份。其中还包含有关在发生系统故障时如何从备份中还原的信息。
无论您使用哪种备份方法,可用空间必须是当前安装使用的空间量的至少三倍。空间不足可能导致备份失败,因此请经常检查可用空间。 |
以下小节介绍如何在 SUSE Multi-Linux Manager 容器内备份数据。
1. 备份 SUSE Multi-Linux Manager
备份 SUSE Multi-Linux 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)的任何目录。
还需要备份您的数据库,此操作可以使用 |
-
在容器主机上,以 root 身份运行
mgradm install podman
重新部署 SUSE Multi-Linux Manager 服务器。 -
使用 SUSE Multi-Linux Manager Web UI 或在容器中的命令提示符处使用
mgr-sync
工具重新同步您的 SUSE Multi-Linux Manager 储存库。您可以选择重新注册产品,或跳过注册和 SSL 证书生成部分。 -
在容器中,重新安装
/var/lib/containers/storage/volumes/root/ssl-build/rhn-org-httpd-ssl-key-pair-MACHINE_NAME-VER-REL.noarch.rpm
软件包。 -
安排在下次启动
rhn-search
服务时重新创建搜索索引。此命令仅生成调试消息,而不生成错误消息。在容器中,输入以下命令:rhn-search cleanindex
-
在容器主机上,检查是否需要还原
/var/lib/containers/storage/volumes/var-spacewalk/_data/packages/
。如果/var/lib/containers/storage/volumes/var-spacewalk/_data/packages/
不在您的备份中,则需要还原它。如果源储存库可用,则您可以通过完整通道同步来还原/var/lib/containers/storage/volumes/var-spacewalk/_data/packages/
:mgrctl exec -ti -- mgr-sync refresh --refresh-channels
2. 使用 smdba 管理数据库
The smdba
tool is used for managing a local PostgreSQL database. It allows you to back up and restore your database, and manage backups. It can also be used to check the status of your database, and perform administration tasks, such as restarting. For more information about the smdba
tool, see Database CLI Tool.
smdba
工具仅适用于本地 PostgreSQL 数据库,而不适用于远程访问的数据库或 Oracle 数据库。
要在服务器容器内访问外壳,请在容器主机上运行 |
使用以下命令检查数据库的运行时状态:
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,因此,当文件达到此大小时会创建一个新日志文件。每次创建新备份时,会清除以前的备份以释放磁盘空间。我们建议您使用主机系统上的 systemd 计时器来安排 smdba
备份以确保您的存储得到有效管理,并随时准备好一个备份,以防发生故障。
3.1. 执行手动数据库备份
要在服务器容器内访问外壳,请在容器主机上运行 |
smdba
工具可直接在容器外壳内运行。我们建议您在安装后立即运行手动数据库备份,或者在对配置进行任何重大更改后运行手动备份。
首次运行 |
-
为备份分配永久存储空间。在容器中,此示例使用
/var/spacewalk/
目录。此目录将成为备份的永久目标,因此请确保您的服务器始终可以访问此目录。此目录位于永久存储设备中,有关详细信息,请参见 Persistent Container Volumes。 -
在 SUSE Multi-Linux Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:
mgrctl term
-
在容器内部,执行以下步骤:
-
在您的备份位置为备份创建一个目录:
以 root 身份运行以下命令:
install -d -o postgres -g postgres -m 700 /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
执行数据库备份。但是,由于备份是一项大规模操作,因此在运行备份时,数据库性能可能会下降。我们建议您将定期数据库备份安排在低流量时段,以尽量减少中断。
请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过在容器主机上运行以下命令来查看当前数据库大小:
|
-
在 SUSE Multi-Linux Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:
mgrctl term
-
在容器内部,执行以下步骤:
-
在您的备份位置为备份创建一个目录。以 root 身份输入:
install -d -o postgres -g postgres -m 700 /var/spacewalk/db-backup
-
-
在容器主机上,以 root 身份在
/etc/systemd/system/server-db-backup.service
处创建一个包含以下内容的系统单元文件:[Unit] Description="Server backup service" [Service] ExecStart=mgrctl exec "smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup"
-
在
/etc/systemd/system/server-db-backup.timer
处创建一个包含以下内容的 systemd 计时器文件:[Unit] Description="Run server database backup relative to activation time" [Timer] OnCalendar=Mon..Sun *-*-* 2:00:00 Unit=server-db-backup.service [Install] WantedBy=multi-user.target
-
检查所有配置是否正确:
systemd-analyze verify /etc/systemd/system/server-db-backup.*
-
启用计时器:
systemctl enable --now server-db-backup.timer
4. 从备份中还原
发生故障时,可以使用 smdba
工具从备份中还原。
-
在 SUSE Multi-Linux Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:
mgrctl term
-
在容器内部,执行以下步骤:
-
关闭数据库:
smdba db-stop
-
启动还原过程并等待它完成:
smdba backup-restore start
-
重启动数据库:
smdba db-start
-
检查 RPM 和数据库之间是否有差异。
spacewalk-data-fsck
-
5. 存档日志设置
数据库管理工具 smdba
可以通过存档日志记录来执行热备份。在包含嵌入式数据库的 SUSE Multi-Linux 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
来获取有关占用的表空间的报告,例如:
mgrctl exec 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
子命令。它可以列出表及其大小,例如:
mgrctl exec 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. 数据库连接信息
在容器内,可以通过在 /etc/rhn/rhn.conf
中添加或编辑以下变量来设置 SUSE Multi-Linux Manager 数据库连接信息:
db_backend = postgresql db_user = susemanager db_password = susemanager db_name = susemanager db_host = localhost db_port = 5432 db_ssl_enabled =