2013-05-21 4 views
36

私たちはしばらくの間、postgresql 8.4を実行してきました。他のデータベースと同様に、私たちは徐々にスペースの限界に達しています。私は別の8ギガバイトEBSドライブを追加し、私たちのインスタンスに装着され、それは手動で私が間違っている場合Amazon EC2上でUbuntuのpostgresqlデータを別のディレクトリに移動するにはどうしたらいいですか?

が私を修正して作成されたI /ファイル

/ファイル内

というディレクトリ上で適切に動作するように構成されたが、私すべてのpostgresqlデータが/var/lib/postgresql/8.4/mainに格納されていると考えてください。

私はデータベースをバックアップしましたが、sudo /etc/init.d/postgresql stopを実行しました。これにより、postgresqlサーバーが停止します。 /var/lib/postgresql/8.4/mainの内容を/ filesディレクトリにコピー&ペーストしようとしましたが、それは巨大なMESSでした!ファイルのアクセス許可のためです。コピーして貼り付けることができるように、そのフォルダの内容をchmodに入れなければなりませんでした。ルートパーミッションのため、一部のファイルが完全にコピーされませんでした。私は

data_directory = '/files/postgresql/main' 

ファイルのディレクトリを指すようにpostgresql.conf内data_directoryは、パラメータを変更し、私はsudoが再起動/etc/init.d/postgresql走ったとサーバが起動に失敗しました。おそらく許可の問題が原因です。 Amazon EC2では、デフォルトでubuntuとしてサービスにアクセスできます。端末の中からルートにアクセスできるのは、すべてをもっと複雑にするだけです。

これを行うには、よりクリーンで効率的なステップがありますか?

答えて

74

サーバーを停止します。

権限を保持している間にデータディレクトリをコピーします - cp -aRvを使用してください。

それから(最も簡単なのは、改行を修正する必要がないため)古いデータを別の場所に移動し、古いパスを新しい場所にシンボリックリンクするだけです。

+2

こんにちは、あなたは「古いデーターダールを脇に移動する」という意味を説明できますか?つまり、削除するか、バックアップフォルダにコピーするだけですか?どのデータディレクトリを意味しますか? 'show data_directory;'によって返されるフォルダ全体? –

+0

名前を変更して、何も失うことがない場合は、結局重要であることが判明しました。 –

+0

symlinlkのアイデアは悪くはありませんが、あなたが古いdatadirの場所を保持する必要があるので完璧ではありません。 – yglodt

1

明確化。あなたがデフォルトのユーザとしてubuntuを設定するのはあなたが使った特定のAMIですが、これは他のAMIには当てはまりません。

本質的には、手動でデータを移動しようとしている場合は、rootユーザーとして実行し、実行中のユーザーのポストグラムが使用可能であることを確認する必要があります。

ボリュームのスナップショットを作成し、スナップショットから作成したボリュームのサイズを増やすこともできます。その後、インスタンスのボリュームを新しいボリュームに置き換えることができます(すべての領域を利用するには、パーティションのサイズを変更する必要があります)。

12

ありがとうございました。シンボリックリンクの代わりに、bind mountを使用することもできます。そうすれば、それはファイルシステムから独立しています。データベースに専用のハードドライブを使用する場合は、mount it normallyでもかまいません。データディレクトリに移動します。

私は後者を行いました。誰かが参照を必要とするなら、ここに私のステップがあります。私はこれを多くのAWSインスタンスでスクリプトとして実行しました。

# stop postgres server 
sudo service postgresql stop 

# create new filesystem in empty hard drive 
sudo mkfs.ext4 /dev/xvdb 

# mount it 
mkdir /tmp/pg 
sudo mount /dev/xvdb /tmp/pg/ 

# copy the entire postgres home dir content 
sudo cp -a /var/lib/postgresql/. /tmp/pg 

# mount it to the correct directory 
sudo umount /tmp/pg 
sudo mount /dev/xvdb /var/lib/postgresql/ 

# see if it is mounted 
mount | grep postgres 

# add the mount point to fstab 
echo "/dev/xvdb /var/lib/postgresql ext4 rw 0 0" | sudo tee -a /etc/fstab 

# when database is in use, observe that the correct disk is being used 
watch -d grep xvd /proc/diskstats 
+0

魅力のように動作します、ありがとう:) –

関連する問題