Ubuntu 16.04でPostgreSQLデータディレクトリを新しい場所に移動する方法

前書き

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

前提条件

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

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

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

[[step-1 -—- moving-the-postgresql-data-directory]] ==ステップ1—PostgreSQLデータディレクトリの移動

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

sudo -u postgres psql

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

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

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

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

sudo systemctl stop postgresql

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

sudo systemctl status postgresql

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

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

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

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

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

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

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

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

これで、構成に注目する準備が整いました。

[[step-2 -—-新しいデータの場所を指す]] ==ステップ2—新しいデータの場所を指す

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

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'
. . .

[[step-3 -—- restarting-postgresql]] ==ステップ3—PostgreSQLの再起動

PostgreSQLを開始する準備ができました。

sudo systemctl start postgresql
sudo systemctl status postgresql

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

sudo -u postgres psql

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

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

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

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

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

sudo systemctl restart postgresql
sudo systemctl status postgresql

結論:

順調に進めば、データベースは新しい場所にあるデータディレクトリで実行され、ストレージを拡張できるようになるための重要なステップが完了します。 また、Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャを作成する方法については、5 Common Server Setups For Your Web Applicationを参照することをお勧めします。

Related