PostgreSQLデータディレクトリをUbuntu18.04の新しい場所に移動する方法
序章
データベースは時間の経過とともに大きくなり、元のファイルシステムのスペースを超えることもあります。 それらがオペレーティングシステムの他の部分と同じパーティションにある場合、これはI/Oの競合につながる可能性もあります。
RAID、ネットワークブロックストレージ、およびその他のデバイスは、その他の望ましい機能とともに、冗長性を提供し、スケーラビリティを向上させることができます。 スペースを追加する場合でも、パフォーマンスを最適化する方法を評価する場合でも、他のストレージ機能を利用する場合でも、このチュートリアルでは、PostgreSQLのデータディレクトリを再配置する方法について説明します。
前提条件
このガイドを完了するには、次のものが必要です。
-
root以外のユーザーがいるUbuntu18.04サーバー
sudo
特権。 これらの権限を持つユーザーを設定する方法の詳細については、 Ubuntu18.04を使用したサーバーの初期設定ガイドを参照してください。 -
サーバーにPostgreSQLがインストールされています。 これをまだ設定していない場合は、 Ubuntu18.04にPostgreSQLをインストールして使用する方法ガイドが役立ちます。
この例では、にマウントされたブロックストレージデバイスにデータを移動しています /mnt/volume_nyc1_01
. DigitalOceanでブロックストレージを使用している場合、このガイドは、このチュートリアルを続行する前にボリュームをマウントするのに役立ちます。
ただし、使用する基盤となるストレージに関係なく、次の手順は、データディレクトリを新しい場所に移動するのに役立ちます。
ステップ1—PostgreSQLデータディレクトリの移動
PostgreSQLのデータディレクトリの移動を開始する前に、インタラクティブなPostgreSQLセッションを開始して現在の場所を確認しましょう。 次のコマンドでは、 psql
インタラクティブモニターに入るコマンドであり、 -u postgres
言う sudo
実行する psql
システムのpostgresユーザーとして:
- sudo -u postgres psql
PostgreSQLプロンプトを開いたら、次のコマンドを使用して現在のデータディレクトリを表示します。
- SHOW data_directory;
Output data_directory
------------------------------
/var/lib/postgresql/10/main
(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
進行状況を追跡できるように、詳細な出力を提供します。 開始します rsync
から postgresql
新しい場所の元のディレクトリ構造を模倣するためのディレクトリ。 それを作成することによって postgresql
マウントポイントディレクトリ内のディレクトリであり、PostgreSQLユーザーによる所有権を保持することで、将来のアップグレードでのアクセス許可の問題を回避できます。
注:ディレクトリに末尾のスラッシュがないことを確認してください。これは、タブ補完を使用する場合に追加される可能性があります。 末尾にスラッシュを含める場合は、 rsync
ディレクトリ自体をコピーする代わりに、ディレクトリの内容をマウントポイントにダンプします。
バージョンディレクトリ、 10
、で場所を明示的に定義しているため、厳密には必要ありません。 postgresql.conf
ファイルですが、プロジェクトの規則に従うことは確かに害にはなりません。特に、将来、複数のバージョンのPostgreSQLを実行する必要がある場合はそうです。
- sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
コピーが完了したら、現在のフォルダの名前を次のように変更します。 .bak
拡張し、移動が成功したことを確認するまで保持します。 これは、新しい場所と古い場所の両方に同じ名前のディレクトリがあることから生じる可能性のある混乱を回避するのに役立ちます。
- sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak
これで、新しい場所のデータディレクトリにアクセスするようにPostgreSQLを構成する準備が整いました。
ステップ2—新しいデータの場所を指す
デフォルトでは、 data_directory
に設定されています /var/lib/postgresql/10/main
の中に /etc/postgresql/10/main/postgresql.conf
ファイル。 このファイルを編集して、新しいデータディレクトリを反映します。
- sudo nano /etc/postgresql/10/main/postgresql.conf
で始まる行を見つける data_directory
新しい場所を反映するように、次のパスを変更します。 このチュートリアルのコンテキストでは、更新されたディレクティブは次のようになります。
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .
を押してファイルを保存して閉じます CTRL + X
, Y
、 それから ENTER
. これは、新しいデータディレクトリの場所を使用するようにPostgreSQLを構成するために必要なすべてです。 この時点で残っているのは、PostgreSQLサービスを再度開始し、それが実際に正しいデータディレクトリを指していることを確認することだけです。
ステップ3—PostgreSQLを再起動する
変更後 data-directory
のディレクティブ postgresql.conf
ファイル、先に進み、を使用してPostgreSQLサーバーを起動します systemctl
:
- 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
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)
これは、PostgreSQLが新しいデータディレクトリの場所を使用していることを確認します。 これに続いて、データベースにアクセスし、データベース内のデータを操作できることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。
- sudo rm -Rf /var/lib/postgresql/10/main.bak
これで、PostgreSQLデータディレクトリを新しい場所に正常に移動できました。
結論:
従った場合、データベースは新しい場所にあるデータディレクトリで実行されているはずであり、ストレージを拡張できるようにするための重要なステップを完了しています。 また、Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャを作成する方法については、Webアプリケーションの5つの一般的なサーバー設定を参照することをお勧めします。