序章

データベースは時間の経過とともに大きくなり、元のファイルシステムのスペースを超えることもあります。 また、オペレーティングシステムの他の部分と同じパーティションにある場合、I/Oの競合が発生する可能性があります。 RAID、ネットワークブロックストレージ、およびその他のデバイスは、冗長性およびその他の望ましい機能を提供できます。 スペースを追加する場合でも、パフォーマンスを最適化する方法を評価する場合でも、他のストレージ機能を利用する場合でも、このチュートリアルでは、PostgreSQLのデータディレクトリを再配置する方法について説明します。

前提条件

このガイドを完了するには、次のものが必要です。

この例では、にマウントされたブロックストレージデバイスにデータを移動しています /mnt/volume-nyc1-01. DigitalOceanでブロックストレージを使用している場合、このガイドは、このチュートリアルを続行する前にボリュームをマウントするのに役立ちます。

使用する基盤となるストレージに関係なく、次の手順は、データディレクトリを新しい場所に移動するのに役立ちます。

ステップ1—PostgreSQLデータディレクトリの移動

PostgreSQLのデータディレクトリを移動する準備をするために、インタラクティブなPostgreSQLセッションを開始して現在の場所を確認しましょう。 下の行では、 psql インタラクティブモニターに入るためのコマンドであり、 -u postgres sudoに実行するように指示します psql システムのpostgresユーザーとして:

  1. sudo -u postgres psql

モニターに入ったら、データディレクトリを選択します。

  1. SHOW data_directory;
Output
data_directory ------------------------------ /var/lib/postgresql/9.5/main (1 row)

この出力は、PostgreSQLがデフォルトのデータディレクトリを使用するように構成されていることを確認します。 /var/lib/postgresql/9.5/main、これが移動する必要のあるディレクトリです。 システム上のディレクトリを確認したら、次のように入力します \q やめること。

データの整合性を確保するために、実際にデータディレクトリに変更を加える前にPostgreSQLをシャットダウンします。

  1. sudo systemctl stop postgresql

systemctl すべてのサービス管理コマンドの結果を表示するわけではありません。 成功したことを確認するには、次のコマンドを使用します。

  1. sudo systemctl status postgresql

出力の最後の行にサーバーが停止していることが示されている場合は、シャットダウンされていることを確認できます。

Output
. . . Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

サーバーがシャットダウンされたので、既存のデータベースディレクトリを新しい場所にコピーします。 rsync. を使用して -a フラグは、アクセス許可とその他のディレクトリプロパティを保持します。 -v 進行状況を追跡できるように、詳細な出力を提供します。

注:ディレクトリに末尾のスラッシュがないことを確認してください。これは、タブ補完を使用する場合に追加される可能性があります。 末尾にスラッシュがある場合、 rsync ディレクトリの内容を、それを含むものに転送するのではなく、マウントポイントにダンプします PostgreSQL ディレクトリ:

開始します rsync から postgresql 新しい場所の元のディレクトリ構造を模倣するためのディレクトリ。 それを作成することによって postgresql マウントポイントディレクトリ内のディレクトリであり、PostgreSQLユーザーによる所有権を保持することで、将来のアップグレードでのアクセス許可の問題を回避できます。 バージョンディレクトリ、 9.5 場所を明示的に定義しているため、厳密には必要ありません。 postgresql.conf ただし、プロジェクトの規則に従うことは確かに害にはなりません。特に、将来、複数のバージョンのPostgreSQLを実行する必要がある場合はなおさらです。

  1. sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01

コピーが完了したら、現在のフォルダーの名前を.bak拡張子に変更し、移動が成功したことを確認するまで保持します。 名前を変更することで、新しい場所と古い場所の両方にあるファイルから発生する可能性のある混乱を回避できます。

  1. sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

これで、構成に注意を向ける準備が整いました。

ステップ2—新しいデータの場所を指す

PostgreSQLには、構成値をオーバーライドする方法がいくつかあります。 デフォルトでは、 data_directory に設定されています /var/lib/postgresql/9.5/main の中に /etc/postgresql/9.5/main/postgresql.conf ファイル。 このファイルを編集して、新しいデータディレクトリを反映します。

  1. sudo nano /etc/postgresql/9.5/main/postgresql.conf

で始まる行を見つける data_directory 新しい場所を反映するように、次のパスを変更します。

この場合、更新されたファイルは次の出力のようになります。

/etc/postgresql/9.5/main/postgresql.conf
. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .

ステップ3—PostgreSQLを再起動する

PostgreSQLを起動する準備ができました。

  1. sudo systemctl start postgresql
  2. sudo systemctl status postgresql

新しいデータディレクトリが実際に使用されていることを確認するには、PostgreSQLモニターを起動します。

  1. sudo -u postgres psql

データディレクトリの値をもう一度見てください。

  1. SHOW data_directory;
Output
data_directory ----------------------------------------- /mnt/volume-nyc1-01/postgresql/9.5/main (1 row)

PostgreSQLを再起動し、新しい場所を使用していることを確認したので、この機会にデータベースが完全に機能していることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。

  1. sudo rm -Rf /var/lib/postgresql/9.5/main.bak

最後にPostgreSQLを再起動して、期待どおりに機能することを確認します。

  1. sudo systemctl restart postgresql
  2. sudo systemctl status postgresql

結論:

従った場合、データベースは新しい場所にあるデータディレクトリで実行されているはずであり、ストレージを拡張できるようにするための重要なステップを完了しています。 また、Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャを作成する方法については、Webアプリケーションの5つの一般的なサーバー設定を参照することをお勧めします。