服务器: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 =目录 是的,它的作品!但现在我们有postgresql-xc和错误,如“postgresql不知道这个用户 - postgresql”。 drbd从集群开始复制数据,但postgresql也启动它。
UPD 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
答案 0 :(得分:2)
使用Ubuntu,要为PostgreSQL实例使用特定的数据目录,您只需要这样做:
# pg_createcluster --datadir=/path/to/the/directory 9.3 nameofcluster
您不需要或想要在任何地方摆弄$PGDATA
。请参阅pg_createcluster联机帮助页。
如果使用drdb
复制群集中的数据目录,请记住术语cluster
在PostgreSQL中,有一个不同的含义:它总是一个数据库集群,这意味着特定PostgreSQL实例所服务的所有数据库都有其唯一的数据目录。这不同于drdb cluster
,它是一组机器。
PostgreSQL集群的数据目录根本无法共享,因为只有一台机器上运行的PostgreSQL的一个特定实例可能会写入,否则会发生腐败。
如果drdb
配置为符合此要求,则可以使用它,否则不行。
您可能还会质疑为什么在PostgreSQL自版本8.3以来built-in replication options之后首先使用drdb
,这些版本比纯磁盘复制更专业,更适合数据库。
答案 1 :(得分:1)
将以下内容放在〜/ .bashrc文件中。
PATH=$PATH:/usr/lib/postgresql/<PostgresVersionNumber>/bin
export PATH
export PGDATA="$HOME/<FolderNameForPostgresDatabases>"
替换&#39; PostgresVersionNumber&#39;使用已安装的Postgres版本号。
替换&#39; FolderNameForPostgresDatabases&#39;使用您希望postgres数据库驻留的文件夹的名称。确保已创建文件夹
从终端,您必须导航到〜/ FolderNameForPostgresDatabases,
然后运行:
initdb
在尝试运行之前执行此操作:
pg_ctl start