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 テーブル名