备份和恢复 PostgreSQL

本文描述了在将 PostgreSQL 用作 TSB 数据存储时如何创建备份以及如何使用备份进行恢复。 建议每 24 小时创建一次 TSB 数据存储的备份,以便在发生损坏时可以轻松恢复所有信息。

在开始之前,请确保:

  • 你已经安装和配置了 TSB
  • 你已经安装并配置了 kubectl 以访问管理集群。
  • 你对存储 TSB 数据的 PostgreSQL 系统具有完全访问权限。

创建 TSB 配置的备份

TSB 需要 PostgreSQL 11.1 或更高版本。我们将在示例中使用 11.1 版本。你可以通过运行以下命令创建数据库备份:

pg_dump tsb > tsb_backup.sql

注意

确保备份文件包含完整的信息。在文件的末尾,应该有如下的完成消息:

--
-- PostgreSQL database dump complete
--

备份日志的大小可以通过删除审计日志来减小(请确保你有一个快照以符合你组织的合规性规则)。要进行审计日志截断,你可以使用以下命令(请根据要保留的日志的时间间隔进行调整,以下示例中为2day):

DELETE FROM audit_log WHERE time <= ROUND(EXTRACT(epoch FROM now() - INTERVAL '2day'));

恢复备份

要恢复备份,建议将 tsbiam 部署的副本数缩减为 0,因为这些部署将不断对数据库进行查询:

kubectl scale deployment tsb iam -n tsb --replicas 0

注意

tsb 部署的副本数缩减为 0 仅会在还原进行中时中断在运行中的 TSB 安装中更改配置的能力,但不会干扰数据平面/正在运行的服务。

此时,你需要登录到你的 PostgreSQL 系统,并以特权用户的身份执行以下操作。 通常,数据库将具有少量活动连接。你可以通过运行以下查询来检查它们:

SELECT *
FROM pg_stat_activity
WHERE datname = 'tsb';

接下来的步骤是使用以下查询终止这些连接:

SELECT	pg_terminate_backend (pid)
FROM	pg_stat_activity
WHERE	pg_stat_activity.datname = 'tsb';

然后立即删除 tsb 数据库:

DROP DATABASE tsb;

此时,所有 TSB 配置都将被删除。现在,你需要重新创建 tsb 数据库:

CREATE DATABASE tsb;

并将该数据库的所有权限授予名为 tsb 的用户:

GRANT ALL PRIVILEGES ON DATABASE tsb TO tsb;

完成后,使用用户 tsb 登录并恢复之前创建的转储:

psql tsb < tsb_backup.sql

现在,备份中的所有数据都已恢复,你可以将 tsbiam 部署的副本数增加到 1:

kubectl scale deployment tsb iam -n tsb --replicas 1