mSQL(Mini SQL)のインストールと設定
mSQL(Mini SQL)は,Hughes Technologies 社が開発している軽量のリレーショナルデータベース管理システムである. 1994 年に最初のバージョンが公開され, 最新バージョンは 4.4(2021 年 10 月公開)である. このページでは,FreeBSD 上にソースコードからインストールする手順をまとめる.
mSQL はフリーソフトウェアではない. 非商用の利用は無償で認められているが,商用環境で使用する場合には Hughes Technologies 社から商用ライセンスを購入する必要がある. 大学,学校,登録された慈善団体などには無償ライセンスが提供される.
【関連する外部ページ】 Hughes Technologies 社 mSQL のページ, mSQL 4 マニュアル (PDF)
配布物の入手
FreeBSD の ports コレクションには,かつて databases/msql(バージョン 2 系)と databases/msql3(バージョン 3 系)が存在したが, 2014 年に ports から削除されたため, 現在は pkg や ports からインストールできない. Hughes Technologies 社の Web ページからソースコードを入手してビルドする.
cd /var/tmp fetch https://hughestech.com.au/downloads/msql/msql-4.4.tar.gz
インストール
- 配布ファイルを展開する
cd /var/tmp tar xzf msql-4.4.tar.gz cd msql-4.4
- setup を実行して,コンパイル環境を自動判定させる.
src ディレクトリで直接 make を実行してはならない
./setup
- src/site.mm を確認する. CC(使用する C コンパイラ)と INST_DIR(インストール先ディレクトリ)を, 必要に応じて変更する.INST_DIR の既定値は /opt/msql である. INST_DIR は,インストール先であると同時に,実行時に設定ファイルを探すディレクトリでもある
- ビルドしてインストールする.インストール先ディレクトリへの書き込み権限(通常は root 権限)が必要である
make all make install
設定(msql.conf)
mSQL は,実行時の設定を msql.conf から読み込む. このファイルはインストールディレクトリ(既定では /opt/msql)に置かれる. 各コマンドは -f 設定ファイル名 オプションにより,別の設定ファイルを指定できる.
設定ファイルはプレーンテキストであり, 「[general]」「[system]」のようなセクション見出しと, 「パラメタ名 = 値」の行からなる. 「#」で始まる行はコメントである. 値の中の %I は,インストールディレクトリ(Inst_Dir の値)に展開される. 設定されなかったパラメタには,内部の既定値が使われる.
[general] セクションの主なパラメタは次の通りである.
- Inst_Dir ・・・ インストールディレクトリの絶対パス(既定値 /opt/msql)
- DB_Dir ・・・ データベースファイルを格納するディレクトリ(既定値 %I/msqldb)
- mSQL_User ・・・ mSQL サーバを実行するユーザ. 別のユーザ(root など)が起動した場合,サーバはこのユーザに UID を変更して動作する
- Admin_User ・・・ データベースの生成・削除,サーバの停止などの特権操作を行えるユーザ(既定値 root)
- Pid_File ・・・ サーバプロセスの PID を記録するファイル(既定値 %I/msqld.pid)
- TCP_Port ・・・ TCP による接続を受け付けるポート番号(既定値 1114). 変更した場合には,クライアント側でも同じ値に変更する
- UNIX_Port ・・・ 同一マシン上のクライアントとの接続に使う UNIX ドメインソケットのパス(既定値 %I/msqld.sock)
[system] セクションの主なパラメタは次の通りである.
- Local_Access ・・・ 同一マシン上のアプリケーションからの接続を許可するか(既定値 True)
- Remote_Access ・・・ TCP/IP による他のマシンからの接続を許可するか(既定値 False)
- Host_Lookup ・・・ IP アドレスからホスト名への逆引きを要求するか. True の場合,ホスト名に解決できないホストからの接続は拒否される(既定値 True)
- Read_Only ・・・ True の場合,参照系の問い合わせだけを受け付ける(既定値 False)
- Query_Log, Query_Log_File ・・・ 全ての問い合わせをログに記録するかと,その記録先
- Update_Log, Update_Log_File ・・・ データベースを変更する問い合わせ(INSERT,DELETE,UPDATE)をログに記録するかと,その記録先
- Num_Children ・・・ 複数プロセス版(broker 版)サーバが起動するバックエンドプロセス数
- Table_Cache ・・・ テーブルキャッシュのエントリ数(既定値 8,最小値 2)
以下は設定例である.
[general] Inst_Dir = /opt/msql mSQL_User = msql Admin_User = root Pid_File = %I/msqld.pid TCP_Port = 1114 UNIX_Port = %I/msqld.sock [system] Host_Lookup = True Read_Only = False Local_Access = True Remote_Access = False Query_Log = False Update_Log = False
mSQL_User に指定するユーザは,サーバを動作させるためのサービス用アカウントである. ログインする必要はないため,ログインシェルを無効にして作成する.
pw useradd msql -d /nonexistent -s /usr/sbin/nologin
接続方法とアクセス制御
mSQL サーバへの接続には,UNIX ドメインソケットによる接続と TCP ソケットによる接続の 2 通りがある. UNIX ドメインソケットによる接続は,その性質上,同一マシン上からのみ可能である. TCP ソケットによる接続は,ネットワーク上のどのマシンからでも可能である.
接続の可否は,msql.conf の Local_Access と Remote_Access で設定する. Local_Access の既定値は True,Remote_Access の既定値は False であり, 既定の設定では,同一マシン上からの接続だけが可能である.
Remote_Access = True に設定すると,TCP ポート 1114 が外部に開かれる. mSQL には接続ごとのパスワード認証の仕組みがないため, このポートに到達できるホストを,ipfw などのパケットフィルタで 必要な範囲に限定する.
同一マシン上のサーバに接続する場合でも,UNIX ドメインソケットではなく TCP ソケットを使うクライアントソフトウェアがある. その場合には,Local_Access だけでなく Remote_Access も True にする必要がある.
起動と停止
- サーバのプログラムは,インストールディレクトリの bin ディレクトリに置かれる. 用途に応じて,単一プロセス版のサーバと,複数プロセス(broker)版のサーバのいずれかを使う. サーバは msql.conf の mSQL_User に指定したユーザの権限で動作する
- サーバの停止は,Admin_User に指定したユーザで msqladmin の shutdown を実行する
msqladmin shutdown
- システム起動時に自動起動させる場合には, /usr/local/etc/rc.d に rc.d 形式の起動スクリプトを作成し, /etc/rc.conf に有効化の設定を記述する
デバッグ
環境変数 MSQL_DEBUG を設定すると,デバッグ情報が出力される. 指定できるモジュールは次の 3 つである.
query : サーバへ送られる問い合わせの内容を出力する api : 接続の詳細など,API ライブラリ内部の情報を出力する malloc : API ライブラリが確保したメモリの位置とサイズ,free() に渡されたアドレスを出力する
sh の場合の設定方法は次の通りである.
MSQL_DEBUG=query export MSQL_DEBUG
複数のモジュールを指定する場合には,コロンで区切る.
MSQL_DEBUG=query:api export MSQL_DEBUG
ツール
以下,ツールの説明である.オプションは,頻繁に使われるものだけを記載している. -h でサーバのホスト名を指定する.省略した場合は,同一マシン上のサーバに接続する.
- msql [-h host] database
SQL の問い合わせをサーバに送信し,実行させるプログラム(モニタ). サーバへの送信は「\g」,終了は「\q」.
- relshow [-h host] [database [table]]
データベース,テーブル,カラムの定義を表示するプログラム.
- msqladmin [-h host] コマンド
管理用プログラム.create db_name(データベースの生成),drop db_name(データベースの削除), shutdown(サーバの停止),version(バージョン表示)などのコマンドがある. 特権操作は,msql.conf の Admin_User に指定したユーザで実行する.
- msqldump [-h host] database
データベースの内容を SQL 形式で出力するプログラム.
- msqlexport [-h host] database table
データを,表計算ソフトウェアでの操作に適した区切り形式で出力するプログラム.
- msqlimport [-h host] database table
区切り形式のデータを読み込み,テーブルに挿入するプログラム.