👋

H2 database をサーバーとして動作させて別PCから接続する

2024/08/17に公開

H2 database をサーバーとして動作させて LAN で別PCから接続したときの手順です。
プロダクション用途ではありません、楽しそうと思っただけです。
ゴールは jdbc 接続できることと h2-console が使用できること。

  • サーバー
    • OS は MX Linux 23.3
    • IPアドレスは 192.168.0.24
    • h2 のバージョンは 2.3.230
      • 2024-08-17 時点で 2.3.232。記録したのは少し前のため。
    • 20年前のPCで 32bit 🧓

インストールする

zip ファイルを解凍するだけです。

  • h2database.com Downloads から Platform-Independent Zip をダウンロードして解凍。
    • 解凍するとディレクトリー h2 ができます。その中にディレクトリー bin があります。

ファイアウォールを調整する

事前にファイアウォールのポート 9092/tcp8082/tcpallow します。
9092/tcp はデータベースへの接続、8082/tcp はブラウザから h2-console を使用できるようにするため。いずれもデフォルト、指定可能。

sudo ufw allow 9092/tcp
sudo ufw allow 8082/tcp

h2 サーバーを起動する

java -cp bin/h2-2.3.230.jar org.h2.tools.Server に続けてオプションをいくつか指定します。-cp はクラスパスです。

java -cp bin/h2-2.3.230.jar org.h2.tools.Server \
-tcp -web -ifNotExists -tcpAllowOthers -webAllowOthers \
-webExternalNames 192.168.0.24

各オプションの説明はこちら h2database.com Server

下は起動成功時の出力。

TCP server running at tcp://localhost:9092 (others can connect)
Web Console server running at http://localhost:8082 (others can connect)

JDBCで接続する

接続の確認は DBeaver Community でおこないました。

JDBC接続文字列は jdbc:h2:tcp://アドレス:ポート/DBファイルへのパス です。
ユーザー名とパスワードは初回接続時の値です。

最初のDBへの接続に DBeaver の H2 Server のデフォルトの接続設定をそのまま使用した場合はユーザー名が sa になるので注意。

例えば jdbc:h2:tcp://192.168.0.24:9092/~/h2db/hellodb です。
DBファイルへのパスは h2 database を起動したユーザーのパス ~/h2db/hellodb です。

接続時にDBファイルが無くても起動時オプション -ifNotExists によりサーバー側に ~/h2db/hellodb.mv.db ができます。

# サーバー側にファイルができてる
ls ~/h2db/
hellodb.mv.db

h2-consoleにアクセスする

ブラウザで http://192.168.0.24:8082 にアクセスすると h2-console が表示されます。

項目
Driver Class org.h2.Driver
JDBC URL jdbc:h2:tcp://192.168.0.24:9092/~/h2db/hellodb
User Name sa
Password (無し)

起動時に -webExternalNames でサーバー自身のIPアドレスを指定ししないと他のPCからアクセスできません。

[-webExternalNames <names>] The comma-separated list of external names and IP addresses of this server, used together with -webAllowOthers

これを指定せずに他のPCからブラウザで http://192.168.0.24:8082 にアクセスすると Host 192.168.0.24 not found などのホスト見つからずになります。

h2 サーバーを停止する

Spring Boot アプリケーションで使用したり DBeaver で SQL して、飽きたら停止します。

Ctrl+C で停止します。


以上

Discussion