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

前書き

データベースは時間とともに成長し、元のファイルシステムのスペースが大きくなる場合があります。 オペレーティングシステムの他の部分と同じパーティションに配置されている場合、I / O競合が発生する可能性もあります。

RAID、ネットワークブロックストレージ、およびその他のデバイスは、他の望ましい機能とともに、冗長性を提供し、スケーラビリティを向上させることができます。 スペースを追加する場合、パフォーマンスを最適化する方法を評価する場合、または他のストレージ機能を活用する場合、このチュートリアルでは、PostgreSQLのデータディレクトリの再配置について説明します。

前提条件

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

  • `+ sudo +`特権を持つ非rootユーザーを持つUbuntu 18.04サーバー。 これらの権限を持つユーザーをセットアップする方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04での初期サーバーセットアップ]をご覧ください。 ]ガイド。

  • サーバーにインストールされたPostgreSQL。 これをまだ設定していない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04 [インストールと使用方法] PostgreSQL on Ubuntu 18.04]ガイドが役立ちます。

この例では、「+ / mnt / volume_nyc1_01 +」にマウントされたブロックストレージデバイスにデータを移動しています。 DigitalOceanでBlock Storageを使用している場合、https://www.digitalocean.com/community/tutorials/how-to-use-block-storage-on-digitalocean [このガイド]は、これを続行する前にボリュームをマウントするのに役立ちます。チュートリアル。

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

手順1-PostgreSQLデータディレクトリの移動

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

sudo -u postgres psql

PostgreSQLプロンプトを開いたら、次のコマンドを使用して現在のデータディレクトリを表示します。

SHOW data_directory;
Output       data_directory
------------------------------

(1 row)

この出力は、PostgreSQLがデフォルトのデータディレクトリ `+ / var / lib / postgresql / 10 / main `を使用するように設定されていることを確認しているため、移動する必要があるディレクトリです。 システム上のディレクトリを確認したら、「 \ q 」と入力し、「 ENTER +」を押してPostgreSQLプロンプトを閉じます。

データの整合性を確保するには、データディレクトリに実際に変更を加える前にPostgreSQLを停止します。

sudo systemctl stop postgresql

`+ systemctl +`は、すべてのサービス管理コマンドの結果を表示しません。 サービスが正常に停止したことを確認するには、次のコマンドを使用します。

sudo systemctl status postgresql

出力の最終行は、PostgreSQLが停止したことを示しているはずです。

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

PostgreSQLサーバーがシャットダウンしたので、 `+ rsync `を使用して既存のデータベースディレクトリを新しい場所にコピーします。 ` -a `フラグを使用すると、パーミッションとその他のディレクトリプロパティが保持され、 ` -v `は詳細な出力を提供するため、進行状況を追跡できます。 新しい場所の元のディレクトリ構造を模倣するために、 ` postgresql `ディレクトリから ` rsync `を開始します。 マウントポイントディレクトリ内にその ` postgresql +`ディレクトリを作成し、PostgreSQLユーザーの所有権を保持することにより、将来のアップグレードでのアクセス許可の問題を回避できます。

バージョンディレクトリ `+ 10 `は、 ` postgresql.conf +`ファイルで明示的に場所を定義しているため、厳密に必要ではありませんが、プロジェクトの規則に従うことは、特にPostgreSQLの複数のバージョンを実行する将来:

sudo rsync -av /var/lib/postgresql

コピーが完了したら、現在のフォルダーの名前を「+ .bak +」拡張子に変更し、移動が成功したことを確認するまで保持します。 これにより、新しい場所と古い場所の両方に同じような名前のディレクトリがあるために生じる混乱を避けることができます。

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

これで、PostgreSQLを設定して、新しい場所のデータディレクトリにアクセスする準備が整いました。

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

デフォルトでは、 `+ / etc / postgresql / 10 / main / postgresql.conf `ファイルの ` data_directory `は ` / var / lib / postgresql / 10 / main +`に設定されます。 このファイルを編集して、新しいデータディレクトリを反映します。

sudo nano /etc/postgresql/10/main/postgresql.conf

`+ data_directory +`で始まる行を見つけて、新しい場所を反映するように続くパスを変更します。 このチュートリアルのコンテキストでは、更新されたディレクティブは次のようになります。

/etc/postgresql/10/main/postgresql.conf

. . .
data_directory = ''
. . .

ファイルを保存して閉じるには、「+ CTRL + X 」、「 Y 」、「 ENTER +」の順に押します。 新しいデータディレクトリの場所を使用するようにPostgreSQLを構成するために必要なことはこれだけです。 この時点で残っているのは、PostgreSQLサービスを再度開始し、それが実際に正しいデータディレクトリを指していることを確認することです。

ステップ3-PostgreSQLの再起動

+ postgresql.conf`ファイルの + data-directory + ディレクティブを変更したら、先に進み、 + systemctl`を使用してPostgreSQLサーバーを起動します。

sudo systemctl start postgresql

PostgreSQLサーバーが正常に起動したことを確認するには、 `+ systemctl +`を再度使用してステータスを確認します。

sudo systemctl status postgresql

サービスが正常に開始された場合、このコマンドの出力の最後に次の行が表示されます。

Output. . .
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

最後に、新しいデータディレクトリが実際に使用されていることを確認するには、PostgreSQLコマンドプロンプトを開きます。

sudo -u postgres psql

データディレクトリの値を再度確認します。

SHOW data_directory;
Output            data_directory
-----------------------------------------

(1 row)

これにより、PostgreSQLが新しいデータディレクトリの場所を使用していることが確認されます。 これに続いて、データベースにアクセスし、内部のデータとやり取りできることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。

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

これで、PostgreSQLデータディレクトリを新しい場所に正常に移動できました。

結論:

順調に進めば、データベースは新しい場所にあるデータディレクトリで実行され、ストレージを拡張できるようになるための重要なステップが完了します。 アイデアについては、https://www.digitalocean.com/community/tutorials/5-common-server-setups-for-your-web-application [Webアプリケーション用の5つの一般的なサーバー設定]をご覧ください。 Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャの作成方法について。

Related