かなり長い間、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にアクセスできるため、すべてがより複雑になります。
これを行うためのステップバイステップの方法ではるかにクリーンで効率的なステップがありますか?
サーバーを停止します。
パーミッションを保持したままdatadirをコピーします-cp -aRv
を使用します。
次に(初期スクリプトを変更する必要がないため、最も簡単です)古いdatadirを脇に移動し、古いパスを新しい場所にシンボリックリンクします。
受け入れられた回答をありがとう。シンボリックリンクの代わりに 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
明確化。 ubuntuをデフォルトユーザーとして設定するのは、使用した特定のAMIであり、これは他のAMIには適用されない場合があります。
基本的に、データを手動で移動しようとする場合、おそらくrootユーザーとして移動し、postgresを実行しているユーザーが使用できるようにする必要があります。
ボリュームのスナップショットを作成し、スナップショットから作成されたボリュームのサイズを大きくするオプションもあります。次に、インスタンスのボリュームを新しいボリュームに置き換えることができます(おそらく、すべてのスペースを利用するには、パーティションのサイズを変更する必要があります)。