嗨,我在 centos 7 机器上运行,我正在将旧的 postgres 数据库迁移到新服务器,它有 10TB 的数据,所以我尝试使用 pg_basebackup。新服务器有一个独立的磁盘,有足够的存储空间来处理操作,但它不是主磁盘。我想将 PGDATA 设置到这个大数据盘中。
我已按照以下步骤操作:
安装 postgres-12 和 postgres12-contrib
将数据盘挂载到新机器上
在数据盘中创建一个空的 pgdata 目录。全部使用用户 postgres。
利用
/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。您只需启动它,可能在以适合您情况的任何方式更改配置文件之后。
尽管您可能应该使用命名插槽将其配置为流式传输,否则在进行备份时它会落后,但这将是一个不同的问题。
为什么不直接将驱动器阵列从一台服务器移动到另一台服务器?是否希望更改存储硬件以及服务器硬件?