【macOS】【CentOS】【PostgreSQL】インストールから仮想マシンのデータベースにホストPCで外部接続するまで
CentOS8にPostgreSQLをインストールしてみます。
MySQLと迷ったのですが職場の環境がPostgreSQLなのでそちらを選択。
余談ですが、PostgreSQLとMySQLはどちらも無償で利用出来るオープンソース、かつ高性能なデータベースです。
MySQLについては全く触ったことが無いので興味本位で検討していました。
両者の違いについてはこのあたりを読んでおくと良いと思います。
それでは目次です。
インストール
まずはインストールするところからです。
前提としてCentOSのrootユーザで進めます。
インストールを実行します。
$ yum -y install postgresql-server
コマンドの途中の-yは問い合わせ(y/n)に対し全てyで答えてくれるオプションです。
完了後、データベースの初期化を行います。
$ postgresql-setup initdb
初期化を行うと新規データベースクラスタが作成されます。
データベースクラスタとは、物理的なデータ本体や設定ファイルなどのデータベースシステムの全データを保持する領域のことを言います。
設定ファイルは「/var/lib/pgsql/data」に配置されます。
設定ファイル変更
続いて設定ファイルの変更を行います。
設定ファイルの配置場所まで移動します。
$ cd /var/lib/pgsql/data
設定ファイルのバックアップ(postgresql.conf.org)を作成します。
$ cp postgresql.conf postgresql.conf.org
「listen_addresses」のパラメータを設定します。
デフォルトではlocalhost(自ホスト)からの接続しか許可されていません。
パラメータを「*」に設定することにより外部接続が可能になります。
$ vim postgresql.conf
以下の通り変更します。
#listen_addresses = 'localhost'
これを
listen_addresses = '*'
に変更。
続いて別の設定ファイルを変更します。
先ほどと同様にバックアップを作成。
$ cp pg_hba.conf pg_hba.conf.org
こちらも外部接続の設定を行います。
「host all all 接続許可するIPアドレス/32 trust」のように記述することで、パスワード不要で外部接続出来る様になるみたいです。
とりあえず今回は仮想マシンを起動しているホストPCからパスワード付きで接続可能な様に設定しようと思います。
$ vim pg_hba.conf
以下の通り変更します。
# "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident
これを
# "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Host connections host all all 192.168.56.1/32 password
に変更。
接続を許可するIP(192.168.56.1/32)は環境によって読み替えてください。
VirtualBoxのホストネットワークマネージャーから確認出来ます。
今回の様に192.168.56.1/32と指定すると192.168.56.1のみが許可されます。
192.168.56.1/16と指定した場合は192.168以降全て許可されるみたいです。
続いて外部接続を行う上で欠かせないファイヤーウォールの設定。
$ firewall-cmd --add-service=postgresql --zone=public --permanent
設定が完了したらリロードします。
$ firewall-cmd --reload
ファイヤーウォールの設定が問題ないか確認します。
$ firewall-cmd --list-services --zone=public --permanent
以下の通りpostgresqlが含まれていればOKです。
ssh dhcpv6-client http https postgresql
起動とpostgresユーザのパスワードを設定
設定が完了したら起動してみます。
$ service postgresql restart
接続出来るか確認します。
$ psql -U postgres
以下のように表示されればOKです。
psql (10.6) "help" でヘルプを表示します。 postgres=#
ついでに、そのままpostgresデータベースに入っている状態で以下のSQLを実行しパスワードを変更します。
alter role postgres with password 'postgres';
とりあえず初期設定としてpostgresとしていますが、任意で読み替えてください。
自動起動設定
CentOS起動時にPostgreSQLを自動で起動する様に設定します。
$ systemctl enable postgresql
設定出来ているか確認します。
$ systemctl list-unit-files | grep postgresql
以下の通りpostgresql.serviceがenabledになっていればOKです。
postgresql.service enabled postgresql@.service disabled
逆に自動起動を無効にする場合は以下。
$ systemctl disable postgresql
同様に確認し、postgresql.serviceがdisabledになっていれば無効になっています。
ホストPCからデータベース管理ツールで仮想マシンのデータベースに外部接続
いよいよホストPCからデータベースへ外部接続してみます。
今回はTablePlusというソフトウェアを使用します。
調べたところMacではTeamSQLというソフトウェアが無償で使える上に評判も良さそうだったのですが、残念ながらDataRowと名前を変えて有償化されたとのことです。
妥協と言うと失礼かもしれませんが、そんなこんなでTablePlusを使います。
TablePlusも制限はありますが無償で使えます。
個人が趣味で使う分には無償で十分な機能が揃っていると思います。
まずは公式サイトからダウンロードします。
「Download for Mac」を選択します。
ダウンロードしたdmgファイルを実行します。
「TablePlus」を「Applications」フォルダにドラッグ&ドロップします。
TablePlusを起動します。
起動画面の右側を右クリックし「New」→「Connection...」を選択します。
「PostgreSQL」を選択し「Create」を選択します。
Nameは任意、それ以外は仮想マシンの設定値に従って入力します。
入力後に「Test」を選択します。
無事に接続が確立出来れば入力欄が緑色に’なります。
この状態で「Save」を選択します。
起動画面に戻り右側に接続情報が保存されます。
接続情報をダブルクリックすると管理画面が開きます。
この画面からデータベースを操作することが可能です。
表形式でテーブルをCREATE出来たり値をINSERT出来るので便利ですよ。
今回はここまで。