Postgresql

pg_basebackup 的 Postgres 初始化

  • December 17, 2020

嗨,我在 centos 7 機器上執行,我正在將舊的 postgres 數據庫遷移到新伺服器,它有 10TB 的數據,所以我嘗試使用 pg_basebackup。新伺服器有一個獨立的磁碟,有足夠的儲存空間來處理操作,但它不是主磁碟。我想將 PGDATA 設置到這個大數據盤中。

我已按照以下步驟操作:

  1. 安裝 postgres-12 和 postgres12-contrib
  2. 將數據盤掛載到新機器上
  3. 在數據盤中創建一個空的 pgdata 目錄。全部使用使用者 postgres。
  4. 採用/usr/bin/pg_basebackup -h IP_OF_OLD_MACHINE -D /mnt/disks/data-disk/pgdata -P -U USERNAME --wal-method=stream

我認為pg_basebackup成功結束了,數據花了幾個小時但完全沒有提示任何錯誤。

total 132K
-rw-------. 1 postgres postgres  230 Mar 18 12:36 backup_label
drwx------. 7 postgres postgres 4.0K Mar 18 12:43 base
-rw-------. 1 postgres postgres   30 Mar 19 00:13 current_logfiles
drwx------. 2 postgres postgres 4.0K Mar 19 00:13 global
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 log
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_commit_ts
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_dynshmem
-rw-------. 1 postgres postgres 4.8K Mar 18 12:36 pg_hba.conf
-rw-------. 1 postgres postgres 4.7K Mar 18 12:36 pg_hba.conf~
-rw-------. 1 postgres postgres 1.6K Mar 19 00:13 pg_ident.conf
drwx------. 4 postgres postgres 4.0K Mar 18 12:36 pg_logical
drwx------. 4 postgres postgres 4.0K Mar 18 12:36 pg_multixact
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_notify
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_replslot
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_serial
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_snapshots
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_stat
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_stat_tmp
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_subtrans
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_tblspc
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_twophase
-rw-------. 1 postgres postgres    3 Mar 19 08:27 PG_VERSION
drwx------. 3 postgres postgres 4.0K Mar 18 12:36 pg_wal
drwx------. 2 postgres postgres 4.0K Mar 18 12:36 pg_xact
-rw-------. 1 postgres postgres   88 Mar 18 12:36 postgresql.auto.conf
-rw-------. 1 postgres postgres  24K Mar 19 08:39 postgresql.conf

好的,現在我正在嘗試使用我剛剛帶來的數據初始化一個 postgres 伺服器。

這是我的嘗試,查看文件:

/usr/pgsql-12/bin/postgresql-12-setup initdb -D /mnt/disks/data-disk/pgdata
systemctl: invalid option -- 'D'
failed to find PGDATA setting in -D.service


/usr/pgsql-12/bin/postgresql-12-setup initdb --pgdata=/mnt/disks/data-disk/pgdata
systemctl: unrecognized option '--pgdata=/mnt/disks/data-disk/pgdata.service'
failed to find PGDATA setting in --pgdata=/mnt/disks/data-disk/pgdata.service

過程中是否有一些錯誤?

更新: 正如@pifor 告訴我的那樣,我將 PATH 添加到 postgres bash_profile 中,然後開始辨識 PG_DATA。現在的問題是 initdb 旨在找到一個空文件夾,並且由於 pg_basebackup 而不是空的

物理備份(如 pg_basebackup)會生成一個已經初始化的目錄。您不執行 initdb。您只需啟動它,可能在以適合您情況的任何方式更改配置文件之後。

儘管您可能應該使用命名插槽將其配置為流式傳輸,否則在進行備份時它會落後,但這將是一個不同的問題。

為什麼不直接將驅動器陣列從一台伺服器移動到另一台伺服器?是否希望更改儲存硬體以及伺服器硬體?

引用自:https://dba.stackexchange.com/questions/262271