3

服务器:Ubuntu 服务器 14 lts + PostgreSQL 9.2 我想使用 drbd 创建集群数据库,但我无法在没有集群初始化的情况下设置 PGDATA。我只需要说 pgsql 使用来自 drbd 磁盘的数据。我该怎么做?

示例 1:

mkdir /cluster/var/lib/pgsql -p
chown postgres:postgres /cluster/var/lib/pgsql -R
cp -R /var/lib/pgsql /cluster/var/lib/pgsql

edit /etc/init.d/postgresql :
 PGDATA=/cluster/var/lib/pgsql/data
...
PGLOG=/cluster/var/lib/pgsql/pgstartup.log

/etc/init.d/postgresql start

在 postgresql 8.3 中它可以工作,但在 9.2 中我无法更改 /etc/init.d/postgresql 中的 pgdata,我需要找到另一个文件并设置 pgdata,但是,令人惊讶的是,它什么也没做。

示例2:PGDATA - 指定数据库集群要存储的目录;可以使用 -D 选项覆盖。

好的,让我们开始吧:--pgdata=directory 是的,它有效!但现在我们有 postgresql-xc 和类似“postgresql 不知道这个用户 - postgresql”的错误。drbd start 从集群复制数据,但 postgresql 也启动它。

更新 1:

root: initdb --pgdata=/home/username/dir
~initdb not install~bla-bla-bla~use apt-get install postgres-xc

UPD2:

$: /usr/lib/postgresql/9.3/bin/initdb --pgdata=/whateveryouwant

#now you can run postgresql only one way:

$: /usr/lib/postgresql/9.3/bin/postgres -D /see_up

#then:

LOG:  database system was shut down at 2014-09-26 15:56:33 YEKT   
LOG:  database system is ready to accept connections    
LOG:  autovacuum launcher started

#aaaaaaaaaaand...nothing. just empty console, ^C stopping postgres    
#another SSH connect:

$: ps-ela

S  1000  5995  5217  0  80   0 - 62202 poll_s pts/0    00:00:00 postgres    
1 S  1000  5997  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  5998  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  5999  5995  0  80   0 - 62202 poll_s ?        00:00:00 postgres    
1 S  1000  6000  5995  0  80   0 - 62415 poll_s ?        00:00:00 postgres    
1 S  1000  6001  5995  0  80   0 - 26121 poll_s ?        00:00:00 postgres

#is it ok? because...

$: /etc/init.d/postgresql status    
9.3/main (port 5432): down
4

2 回答 2

5

在 Ubuntu 中,要为 PostgreSQL 实例使用特定的数据目录,您只需要执行以下操作:

# pg_createcluster --datadir=/path/to/the/directory 9.3 nameofcluster

您不需要或不想在$PGDATA任何地方摆弄。请参阅pg_createcluster联机帮助页。

如果drdb用于复制集群中的数据目录,请记住cluster PostgreSQL 用语中的术语有不同的含义:它始终是一个数据库集群,这意味着由特定 PostgreSQL 实例服务的所有数据库及其唯一的数据目录。这与一个drdb cluster机器集群不同。

PostgreSQL 集群的数据目录根本无法共享,也就是说只有一台机器上运行的 PostgreSQL 的一个特定实例可以写入其中,否则会导致损坏。

如果drdb配置符合这个要求,就可以使用,否则不行。您可能还会质疑drdb,当 PostgreSQL 自 8.3 版以来具有内置复制选项时,为什么要首先使用这些选项 ,这些选项比纯磁盘复制更专业,更适合数据库。

于 2014-09-24T13:17:53.553 回答
4

将以下内容放在您的 ~/.bashrc 文件中。

PATH=$PATH:/usr/lib/postgresql/<PostgresVersionNumber>/bin
export PATH
export PGDATA="$HOME/<FolderNameForPostgresDatabases>"

将“PostgresVersionNumber”替换为您安装的 Postgres 版本号。
将“FolderNameForPostgresDatabases”替换为您希望 postgres 数据库驻留的文件夹的名称。确保已创建文件夹

从终端,您必须导航到 ~/FolderNameForPostgresDatabases,然后运行:

initdb

在尝试运行之前执行此操作:

pg_ctl start
于 2015-09-14T23:39:57.177 回答