web-dev-qa-db-ja.com

Amazon EC2を介してUbuntuの別のディレクトリにpostgresqlデータを移動するにはどうすればよいですか?

かなり長い間、postgresql 8.4を実行しています。他のデータベースと同様に、スペースのしきい値に徐々に到達しています。別の8 GB EBSドライブを追加してインスタンスにマウントし、/ filesというディレクトリで適切に動作するように構成しました

/ files内で、手動で作成しました

私が間違っている場合は修正しますが、すべてのpostgresqlデータは/var/lib/postgresql/8.4/mainに保存されていると思います

データベースをバックアップし、Sudo /etc/init.d/postgresql stopを実行しました。これにより、postgresqlサーバーが停止します。 /var/lib/postgresql/8.4/mainの内容をコピーして/ filesディレクトリに貼り付けようとしましたが、それは非常に大きな問題でした!ファイルの許可が原因です。コピーして貼り付けられるように、そのフォルダの内容をchmodしなければなりませんでした。一部のファイルは、ルート権限のために完全にはコピーされませんでした。ファイルディレクトリを指すようにpostgresql.confのdata_directoryパラメーターを変更しました

 data_directory = '/files/postgresql/main'

そして、Sudo /etc/init.d/postgresql restartを実行しましたが、サーバーの起動に失敗しました。おそらく、許可の問題が原因です。 Amazon EC2では、デフォルトでubuntuとしてのみサービスにアクセスできます。ターミナル内からのみrootにアクセスできるため、すべてがより複雑になります。

これを行うためのステップバイステップの方法ではるかにクリーンで効率的なステップがありますか?

36
noahandthewhale

サーバーを停止します。

パーミッションを保持したままdatadirをコピーします-cp -aRvを使用します。

次に(初期スクリプトを変更する必要がないため、最も簡単です)古いdatadirを脇に移動し、古いパスを新しい場所にシンボリックリンクします。

77
Craig Ringer

受け入れられた回答をありがとう。シンボリックリンクの代わりに bind mount を使用することもできます。そのようにして、ファイルシステムから独立しています。データベース専用のハードドライブを使用する場合は、 通常のマウント も使用できます。データディレクトリへ。

後者をやりました。誰かが参照を必要とする場合、ここに私のステップがあります。これを多くの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
13

明確化。 ubuntuをデフォルトユーザーとして設定するのは、使用した特定のAMIであり、これは他のAMIには適用されない場合があります。

基本的に、データを手動で移動しようとする場合、おそらくrootユーザーとして移動し、postgresを実行しているユーザーが使用できるようにする必要があります。

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

1
datasage