2024 年度 OSSリテラシ3 : データベースサーバのセットアップ

はじめに

本演習ではデータベースサーバとして MariaDB を用いる. MariaDB は MySQL から派生したものであり, 最近は MySQL の代わりに MariaDB が使われることが多い. また,ターミナルで打鍵するコマンド名は mysql であることに注意されたい.

ここでは,後日構築する IoT デバイスから送られてくるデータを 保管するために,iotex という名前のデータベースを作成し, それを操作するためのユーザを作成する.

インストール

パッケージをインストールする.

$ sudo apt update 
$ sudo apt install mariadb-server mariadb-client

ユーザとデータベースの作成

ターミナルから MariaDB を操作するやり方として,mysql コマンドの -e オプションの引数として "create database iotex" のようなデータベース操作言語 (SQL) の命令を与えることができる.今回はそのような方法でデータベース操作を行うことにする.

注: デフォルトでは root ユーザに「UNIX_SOCKET Authentication Plugin」が有効にされているため, 以下のように sudo で管理者権限を使えばパスワードは無し (エンターを打鍵するだけ) でデータベースにアクセスすることができる.

データベース iotex の作成.

$ sudo mysql -u root -p -e "create database iotex" 

  Enter password:  <エンターキーを打鍵>

データベース iotex が作成されたことを確認

$ sudo mysql -u root -p -e "show databases"

  Enter password:  <エンターキーを打鍵>
     +--------------------+
     | Database           |
     +--------------------+
     | information_schema |
     | iotex              |    (<-- この行が存在することを確認)
     | mysql              |
     | performance_schema |
     +--------------------+

ユーザを 2 人分作成をする. 1 人目のユーザは先に作成したデータベース iotex に書き込みできる者であり, 2 人目のユーザはデータベース iotex を読めるが書き込み出来ない者である. 後者は後ほど設定するグラフ作成ツール (grafana) で必要となる.

1 人目のユーザの名前は iotex とする.パスワードは好きに決めて良い (以下の例では YOUR_PASSWD. 適宜自分のパスワードに置き換えること). ホスト名 (以下の例では localhost) は変更しないこと. 作成したユーザにデータベース iotex の管理者権限 (ALL PRIVILEGES) を設定する. "iotex.*" とすることで, データベース iotex に含まれる全てのテーブルという意味になる.

$ sudo mysql -u root -p -e "create user 'iotex'@'localhost' identified by 'YOUR_PASSWD'"

  Enter password:  <エンターキーを打鍵>

$ sudo mysql -u root -p -e "GRANT ALL PRIVILEGES ON iotex.* TO 'iotex'@'localhost'"

  Enter password:  <エンターキーを打鍵>

2 人目のユーザの名前は grafana とする.パスワードは好きに決めて良い (以下の例では YOUR_PASSWD. 適宜自分のパスワードに置き換えること). 作成したユーザにデータベース iotex の読み込み権限 (SELECT) を設定する. "iotex.*" とすることで, データベース iotex に含まれる全てのテーブルという意味になる.

$ sudo mysql -u root -p -e "create user 'grafana'@'localhost' identified by 'YOUR_PASSWD'"

  Enter password:  <エンターキーを打鍵>

$ sudo mysql -u root -p -e "GRANT SELECT ON iotex.* TO 'grafana'@'localhost'"

  Enter password:  <エンターキーを打鍵>

ユーザの設定確認.ここでは作成したユーザでデータベース iotex にアクセスできるか確認する.

$ mysql -u iotex -p -e "show databases"

  Enter password: <設定した iotex のパスワードを入力>
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | iotex              |   <-- データベース iotex が見える
  +--------------------+


$ mysql -u grafana -p -e "show databases"

  Enter password: <設定した grafana のパスワードを入力>
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | iotex              |   <-- データベース iotex が見える
  +--------------------+

課題

データを格納するためのテーブル j4oss3 を作成する. desc コマンドを実行したときに以下のように表示されるテーブルを作成せよ. そして,作成したテーブルにデータを 2 つ程度 INSERT コマンドを用いて入力すること.

テーブルの作成に用いたコマンドや,テーブルにデータを入力したりデータを確認するための コマンド,およびコマンドの実行結果のスクリーンショット (画像) を取り,それを報告すること.

MariaDB [iotex]> desc j4oss3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   | PRI | NULL    |       |
| time  | datetime    | NO   | PRI | NULL    |       |
| temp  | float       | YES  |     | NULL    |       |
| ip    | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

なお,シェルから実行する場合は,以下のように -u iotex (ユーザ名指定),-p iotex (パスワードは打鍵,データベース名は iotex) というオプションを付けて実行すると良い.

$ mysql -u iotex -p iotex -e "create table ... (略)..."

参考までに, テーブルの作り方は以下の通りである. なお, コマンドは大文字でも小文字でも良い.

テーブルの定義
CREATE TABLE テーブル名 
  (  列名1 データ型, 列名2 データ型, … 
      [, primary key (列名p1, 列名p2, …) ]
      [, foreign key (列名f1) references 参照テーブル名 (参照列名) ]
      [, check (条件) ]
  );

テーブルに値を入れる.
INSERT INTO テーブル名 [ (列名1, ..., 列名m)] VALUES (値1, ..., 値m);

テーブルのデータを一覧表示する
SELECT * FROM テーブル名