03-6416-1579

平日 10:00-18:00

Ubuntu にデータベースを作成する


データベースのインストール前提条件

  • HTTP Proxy の設定が必要な場合、HTTP Proxy の設定(環境変数)が予め行われていること。
  • ネットワーク設定が予め行われていること。
  • データベースの設定は、説明では以下の使用します。
    • データベース名称: dbname
    • データベースホスト名: dbhost
    • データベースサービスポート: 5432
    • データベースユーザ名: dbuser
    • データベースユーザパスワード: dbpass

データベースセットアップ手順

  1. パッケージリストを更新します。
    $ sudo apt update
  2. PostgreSQL をインストールし、起動します。
    Ubuntu 18.04 LTS の場合
    $ sudo apt install -y postgresql-10
    Ubuntu 20.04 LTS の場合
    $ sudo apt install -y postgresql-12
    Ubuntu 22.04 LTS の場合
    $ sudo apt install -y postgresql-14
  3. PostgreSQL の設定 (postgresql.conf) を変更します。
    Ubuntu 18.04 LTS の場合
    $ sudo vi /etc/postgresql/10/main/postgresql.conf
    Ubuntu 20.04 LTS の場合
    $ sudo vi /etc/postgresql/12/main/postgresql.conf
    Ubuntu 22.04 LTS の場合
    $ sudo vi /etc/postgresql/14/main/postgresql.conf
    ファイルの以下の箇所を変更します。
    [変更前]
    #listen_addresses = 'localhost'   # what IP address(es) to listen on;
                          
    [変更後]
    listen_addresses = '*'    # what IP address(es) to listen on;
    Ubuntu 22.04 LTS の場合、ファイルの以下の箇所も変更します。
    [変更前]
    #password_encryption = scram-sha-256 # scram-sha-256 or md5
                          
    [変更後]
    password_encryption = md5 # scram-sha-256 or md5
    設定変更を反映するため、データベースを再起動します。
    $ sudo service postgresql restart
  4. データベースを作成します。
    $ sudo su - postgres
    $ psql -l
      ※ 作成しようとしているデータベース名のデータベースが無いことを確認します。
    $ createdb --encoding=UTF-8 dbname
  5. データベースユーザ(データベースにアクセスする際の認証で使用するユーザ)を作成します。
    $ createuser -P dbuser
      ※ パスワード入力(ここでは dbpass
  6. 5.で作成したユーザに dbname へのアクセス権限を付与
    $ echo 'grant all privileges on database dbname to dbuser' | psql dbname
    $ exit
  7. PostgreSQL の設定 (pg_hba.conf) を変更します。

    • [VM サーバと同一のホスト上にデータベースをセットアップしている場合]
    • 7-1-1. まず、docker0 インタフェースの IP アドレスを確認します。

      $ ip address show dev docker0
      3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
                                qdisc noqueue state UP group default 
      link/ether 02:42:e6:14:05:27 brd ff:ff:ff:ff:ff:ff
      inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
         valid_lft forever preferred_lft forever
      inet6 fe80::42:e6ff:fe14:527/64 scope link
         valid_lft forever preferred_lft forever

      上記の場合、データベースサーバの IP アドレスは 172.17.0.1 で、ネットワークアドレスは 172.17.0.0/16 であることを確認できます。

    • 7-1-2. 7-1-1.より docker0 のネットワークアドレスが 172.17.0.0/16 であることが 確認できるため、PostgreSQL 設定ファイルの pg_hba.conf にアクセス許可の設定を 行います。

      Ubuntu 18.04 LTS の場合
      $ sudo vi /etc/postgresql/10/main/pg_hba.conf
      Ubuntu 20.04 LTS の場合
      $ sudo vi /etc/postgresql/12/main/pg_hba.conf
      Ubuntu 22.04 LTS の場合
      $ sudo vi /etc/postgresql/14/main/pg_hba.conf
      ファイルの以下の箇所を変更します。
      [最後に追記]
      host	dbname dbuser	172.17.0.0/16	md5
    • 7-1-3. 設定変更を反映するため、データベースを再起動します。

      $ sudo service postgresql restart
    • [VM サーバと別のホスト上にデータベースをセットアップしている場合]
    • 7-2-1. VM サーバの IP アドレスを xxx.xxx.xxx.xxx とした場合、PostgreSQL 設定ファイルの pg_hba.conf にアクセス許可の設定を行います。

      Ubuntu 18.04 LTS の場合
      $ sudo vi /etc/postgresql/10/main/pg_hba.conf
      Ubuntu 20.04 LTS の場合
      $ sudo vi /etc/postgresql/12/main/pg_hba.conf
      Ubuntu 22.04 LTS の場合
      $ sudo vi /etc/postgresql/14/main/pg_hba.conf
      ファイルの以下の箇所を変更します。
      [最後に追記]
      host	dbname dbuser	xxx.xxx.xxx.xxx/32	md5
    • 7-2-2. 設定変更を反映するため、データベースを再起動します。

      $ sudo service postgresql restart
  8. 以上で、データベースのセットアップは完了です。

データベースバックアップ手順

  1. データベースのバックアップは、データベースのセットアップを行ったホスト上で以下のように操作します。
    $ sudo su - postgres
    $ pg_dump dbname | gzip -c > /tmp/dbname.psql.gz
    作成された /tmp/dbname.psql.gz がバックアップファイルです。

データベースリストア手順

  1. データベースのリストアは、データベースのセットアップを行ったホスト上で以下のように操作します。データベースを一度削除していますので、十分に注意して実行してください。
    dbname.psql.gz は、データベースのバックアップで作成したバックアップファイルです。操作の 前に /tmp/ ディレクトリに転送しておきます。
    $ sudo su - postgres
    $ dropdb dbname
    $ createdb --encoding=UTF-8 dbname
    $ gzip -dc /tmp/dbname.psql.gz | psql dbname
    なお、pg_dump コマンドは異なるホスト上のデータベースを指定してバックアップを取得することも可能ですが、PostgreSQL のバージョンが異なる場合にはアクセスに失敗する可能性があります。そのため、データベースのバックアップについては、データベースサーバ上で実行することをお勧めします。
    取得したバックアップファイルについては、異なるバージョンの PostgreSQL でも基本的には読み込むことが可能ですが、一部互換性のない機能が使用されていた場合にエラーが出力される場合があります。