【问题标题】:Cannot start Postgresql 12 after pg_basebackup (replication)pg_basebackup(复制)后无法启动 Postgresql 12
【发布时间】:2021-03-14 05:37:09
【问题描述】:

我有两台数据库服务器,我正在尝试使用 TimescaleDB 扩展为我的 PostgreSQL 进行主从复制。

我经历了这个过程:

  1. [两者] 在 CentOS 7 上安装 PostgreSQL 12。

  2. [Both] 初始化 DB 并安装 TimescaleDB。 (跟随官网教程)

  3. [Both] 完成所有 firewall-cmdpostgresql.confpg_hba.conf 的工作。

  4. [Master] 创建初始数据库。

  5. [Slave] 停止 PostgreSQL,从 Master 中删除 /var/lib/pgsql/12/datapg_basebackup 中的所有内容。

    (我使用的命令:pg_basebackup -h [MASTER_DB_IP] -D /var/lib/pgsql/12/data -U [REP_USER] -vP -W

  6. [Slave] 设置hot_standby = on 并创建recovery.conf

  7. [Slave] 启动 PostgreSQL 以检查复制工作。

  8. [Slave]出现此错误,无法启动PostgreSQL。

-- Subject: Unit postgresql-12.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit postgresql-12.service has begun starting up.
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.116 KST [10439] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.116 KST [10439] LOG:  listening on IPv4 address "0.0.0.0", port 5432
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.116 KST [10439] LOG:  listening on IPv6 address "::", port 5432
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.122 KST [10439] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.130 KST [10439] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.142 KST [10439] LOG:  redirecting log output to logging collector process
Dec 02 17:53:40 localhost.localdomain postmaster[10439]: 2020-12-02 17:53:40.142 KST [10439] HINT:  Future log output will appear in directory "log".
Dec 02 17:53:42 localhost.localdomain systemd[1]: postgresql-12.service: main process exited, code=exited, status=1/FAILURE
Dec 02 17:53:42 localhost.localdomain systemd[1]: Failed to start PostgreSQL 12 database server.

据我所知,这是复制的最后一步。但是 PostgreSQL 在完成所有配置后并没有启动。

如有任何详细问题,请向我提问。

提前谢谢你。

【问题讨论】:

    标签: postgresql centos backup replication timescaledb


    【解决方案1】:

    从版本 12 开始,PostgreSQL 不再使用 recovery.conf 进行恢复配置。

    相反,您必须将恢复配置参数添加到postgresql.confpostgresql.auto.conf(后者可用于自动编辑)。

    然后在数据目录中创建一个文件standby.signal,它告诉PostgreSQL启动并保持在恢复模式。

    然后启动备用服务器。

    注意:standby_mode 参数已消失。相反,如果您想要待机模式,请使用 standby.signal,而对于结束的恢复模式,请使用 recovery.signal

    【讨论】:

    • 认真的吗?从来不知道。太感谢了!我会试试的。
    • 很高兴我想通了。 recovery.conf 的内容在 PostgreSQL 12 中移动到 postgresql.conf。我必须创建 standby.signalrecovery.signal。它现在完美运行!谢谢劳伦兹。
    • 你需要 either standby.signal recovery.signal - 这是参数standby_mode的替换。
    • 实际上,当我只有standby.signal 时,它不起作用。不知何故,我两者都需要。但是我听说有standby.signal 时会忽略recovery.signal。所以我创建了两者。
    • 您只需要其中之一。我经常这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多