37

かなり長い間、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する必要がありました。root 権限が原因で、一部のファイルが完全にコピーされませんでした。ファイル ディレクトリを指すように、postgresql.conf の data_directory パラメータを変更しました。

 data_directory = '/files/postgresql/main'

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

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

4

3 に答える 3

16

受け入れられた答えをありがとう。symlink の代わりに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
于 2015-09-22T00:16:50.970 に答える
1

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

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

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

于 2013-05-21T21:12:34.300 に答える