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 don't know this user - postgresql」のようなエラーがあります。drbd はクラスターからデータのレプリケートを開始しますが、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 クラスタのデータ ディレクトリは、1 台のマシンで実行されている PostgreSQL の特定の 1 つのインスタンスだけが書き込めるという意味で、まったく共有できません。そうしないと、破損が発生します。

drdbこの要件に準拠するように構成されている場合は、それを使用しても問題ありませんが、そうでない場合は使用できません。また、PostgreSQL にはバージョン 8.3 以降の組み込みのレプリケーション オプション があり、純粋なディスク レプリケーションよりも専門的でデータベースにより適しているのに、drdbそもそもなぜ使用するのか疑問に思うかもしれません。

于 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 に答える