Timescale Cloud:性能、规模、企业级

自托管产品

MST

您可以使用 PostgreSQL 原生命令 pg_dumppg_restore 来备份和恢复每个启用了 TimescaleDB 的自托管 PostgreSQL 数据库。这同样适用于压缩超表,您无需在开始前解压缩块。

如果您定期使用 pg_dump 进行备份,请务必记录您正在运行的 PostgreSQL 和 TimescaleDB 版本。更多信息,请参阅转储和恢复数据库时版本不匹配

本页将向您展示如何

您还可以在不同版本的 TimescaleDB 之间进行升级

  • 一个用于备份的源数据库,以及一个用于恢复的目标数据库。
  • 在您的迁移机器上安装 `psql` 和 `pg_dump` PostgreSQL 客户端工具。

您可以使用 `pg_dump` 和 `psql` 备份和恢复整个数据库。

在终端中

  1. 设置您的连接字符串

    这些变量包含用于备份的源数据库和用于恢复的目标数据库的连接信息

    export SOURCE=postgres://<user>:<password>@<source host>:<source port>/<db_name>
    export TARGET=postgres://<user>:<password>@<source host>:<source port>
  2. 备份您的数据库

    pg_dump -d "$SOURCE" \
    -Fc -f <db_name>.bak

    在 `pg_dump` 运行时,您可能会看到一些错误。请参阅自托管 TimescaleDB 故障排除以检查它们是否可以安全忽略。

  3. 从备份中恢复您的数据库

    1. 连接到您的目标数据库

      psql -d "$TARGET"
    2. 创建新数据库并启用 TimescaleDB

      CREATE DATABASE <restoration database>;
      \c <restoration database>
      CREATE EXTENSION IF NOT EXISTS timescaledb;
    3. 将您的数据库设置为适合恢复的状态

      SELECT timescaledb_pre_restore();
    4. 恢复数据库

      pg_restore -Fc -d <restoration database> <db_name>.bak
    5. 将您的数据库恢复正常操作

      SELECT timescaledb_post_restore();

      请勿将 `pg_restore` 与 `-j` 选项一起使用。此选项无法正确恢复 TimescaleDB 目录。

`pg_dump` 提供了允许您指定要备份的表或模式的标志。但是,使用这些标志意味着转储缺少 TimescaleDB 理解它们之间关系所需的必要信息。即使您明确指定了超表及其所有组成块,转储仍然不会包含在恢复时重新创建超表所需的所有信息。

要备份单个超表,请备份数据库模式,然后仅备份您需要的表。您也可以使用此方法备份单个普通表。

在终端中
  1. 设置您的连接字符串

    这些变量包含用于备份的源数据库和用于恢复的目标数据库的连接信息

    export SOURCE=postgres://<user>:<password>@<source host>:<source port>/<db_name>
    export TARGET=postgres://<user>:<password>@<source host>:<source port>/<db_name>
  2. 备份数据库模式和单个表

    1. 备份超表模式

      pg_dump -s -d $SOURCE --table <table-name> > schema.sql
    2. 将超表数据备份到 CSV 文件

      对于每个要备份的超表

      psql -d $SOURCE \
      -c "\COPY (SELECT * FROM <table-name>) TO <table-name>.csv DELIMITER ',' CSV"
  3. 将模式恢复到目标数据库

    psql -d $TARGET < schema.sql
  4. 从备份中恢复超表

    对于每个要备份的超表

    1. 重新创建超表

      psql -d $TARGET -c "SELECT create_hypertable(<table-name>, <partition>)"

      当您创建新的超表时,您不需要使用与源数据库中相同的参数。如果需要,这可以为您提供一个重新组织超表的好机会。例如,您可以更改分区键、分区数量或块间隔大小。

    2. 恢复数据

      psql -d $TARGET -c "\COPY <table-name> FROM <table-name>.csv CSV"

      PostgreSQL 中的标准 `COPY` 命令是单线程的。如果数据量很大,您可以使用 timescaledb-parallel-copy 来加快复制速度。

最佳实践是每次备份和恢复一个数据库。但是,如果您拥有安装了 TimescaleDB 的 PostgreSQL 实例的超级用户权限,则可以使用 `pg_dumpall` 备份集群中的所有 PostgreSQL 数据库,包括所有数据库共有的全局对象,即数据库角色、表空间和权限授予。您可以使用 `psql` 恢复 PostgreSQL 实例。更多信息,请参阅 PostgreSQL 文档

关键词

在此页面上发现问题?报告问题 或在 GitHub 编辑此页面