Red Hat Enterprise Linux/CentOS 7 にデータベースを作成する


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

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

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

  1. root ユーザに昇格します。
    $ su -
  2. PostgreSQL をインストールし、起動します。
    # yum check-update
    # yum update -y
    # yum install -y postgresql-server
  3. データベースを初期化します。
    # postgresql-setup initdb
  4. PostgreSQLの設定 (postgresql.conf) を変更します。
    # vi /var/lib/pgsql/data/postgresql.conf
    [変更前]
    #listen_addresses = 'localhost'   # what IP address(es) to listen on;
                        
    [変更後]
    listen_addresses = '*'    # what IP address(es) to listen on;
  5. PostgreSQLの設定 (pg_hba.conf) を変更します。

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

      # ip address show dev docker0
      3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdiscnoqueue 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

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

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

      # vi /var/lib/pgsql/data/pg_hba.conf
      [変更]
      host	all all	127.0.0.1/32	ident
      host	all all	::1/128		ident
      host	all all	127.0.0.1/32	trust
      host	all all	::1/128		trust
      [最後に追記]
      host	dbname dbuser	172.17.0.0/16	md5
    • [SIDfm VM Serverと別のホスト上にデータベースをセットアップしている場合]
    • 5-2-1. SIDfm VM ServerのIPアドレスを xxx.xxx.xxx.xxx とした場合、PostgreSQL 設定ファイルの pg_hba.conf にアクセス許可の設定を行います。

      # vi /var/lib/pgsql/data/pg_hba.conf
      [変更]
      host	all all	127.0.0.1/32	ident
      host	all all	::1/128		ident
      host	all all	127.0.0.1/32	trust
      host	all all	::1/128		trust
      [最後に追記]
      host	dbname dbuser	xxx.xxx.xxx.xxx/32	md5
  6. データベースサーバを起動します。
    # systemctl enable postgresql
    # systemctl start postgresql
  7. データベースを作成します。
    # su - postgres
    $ psql -l
      ※ 作成しようとしているデータベース名のデータベースが無いことを確認します。
    $ createdb --encoding=UTF-8 dbname --template=template0
  8. データベースユーザ(データベースにアクセスする際の認証で使用するユーザ)を作成します。
    $ createuser -P dbuser
      ※ パスワード入力(ここでは dbpass
  9. 8.で作成したユーザに dbname へのアクセス権限を付与
    $ echo 'grant all privileges on database dbname to dbuser' | psql dbname
    $ exit
  10. firewalld の設定を変更します。

    標準では、firewalldによりアクセス制限されているため、アクセスの許可を行ないます。 インストールしている環境により、10-1 もしくは 10-2 の操作を実施します。

    1. 10-1. SIDfm VM Server を同一ホスト上にインストールした場合

      dockerコンテナとの通信に利用される専用I/F docker0 からのアクセスを許可する設定を行う。

      # firewall-cmd --change-interface docker0 --zone=trusted --permanent
      # firewall-cmd --reload
    2. 10-2. SIDfm VM Server を別ホスト上にインストールした場合

      SIDfm VM ServerのIPアドレス(ここでは xxx.xxx.xxx.xxx とする)からのアクセスを許可する。

      # firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx" service name="postgresql" accept' --permanent
      # firewall-cmd --reload
  11. 以上で、データベースのセットアップは完了です。

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

  1. データベースのバックアップは、データベースのセットアップを行ったホスト上で以下のように操作します。
    # su - postgres
    $ pg_dump -U dbuser -h localhost dbname | gzip -c > /tmp/dbname.psql.gz
      ※ パスワード入力(ここでは dbpass
    作成された /tmp/dbname.psql.gz がバックアップファイルです。

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

  1. データベースのリストアは、データベースのセットアップを行ったホスト上で以下のように操作します。
    dbname.psql.gzは、データベースのバックアップで作成したバックアップファイルです。操作の 前に/tmp/ディレクトリに転送しておきます。
    # su - postgres
    $ gzip -dc /tmp/dbname.psql.gz | psql -U dbuser -h localhost dbname
      ※ パスワード入力(ここでは dbpass
    なお、pg_dumpコマンドは異なるホスト上のデータベースを指定してバックアップを取得すること も可能ですが、PostgreSQLのバージョンが異なる場合にはアクセスに失敗する可能性があります。 そのため、データベースのバックアップについては、データベースサーバ上で実行することを お勧めします。
    取得したバックアップファイルについては、異なるバージョンのPostgreSQLでも基本的には読み 込むことが可能です。