2022 年度 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 が見える
  +--------------------+

課題

  • 動作確認のために, 以下のテーブルを作成せよ. テーブルの作成, データの挿入, データの表示に用いた SQL 文と戻り値を wbt のオンラインテキストにコピペせよ.

    +--------+-----------------+--------+--------+-----------+
    | 学生   | 科目            | 教員   | 学科   | 学科長    |
    +--------+-----------------+--------+--------+-----------+
    | S1     | プログラム      | P1     | 情報   | C1        |
    | S1     | 情報工学        | P2     | 情報   | C1        |
    | S2     | プログラム      | P1     | 情報   | C1        |
    | S2     | 情報工学        | P3     | 情報   | C1        |
    | S3     | 設計演習        | P4     | 設計   | C2        |
    +--------+-----------------+--------+--------+-----------+
    
    学生 : varchar(2)
    科目 : varchar(20)
    教員 : varchar(2)
    学科 : varchar(20)
    学科長 : varchar(2)
    primary key (学生,科目)

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

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

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

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