2021 年度 OSS リテラシ 3 : MySQL のセットアップ

はじめに

本演習ではサーバとして VMware 上の仮想マシンを用いる. 本資料では仮想マシンに MySQL (Maria DB) をインストールする手順をまとめる.

データベース管理システム MySQL (Maria DB) のインストールと設定

インストール

データベースサーバとして MariaDB を利用する. MariaDB は MySQL からフォークしたものであり, 最近は MySQL の代わりに MariaDB が使われることが多い.

$ sudo -s

# apt-get update 

  ...(略)...

# apt-get install mariadb-server mariadb-client

  ...(略)...

データベースが起動しているか確認する. 実体は MariaDB であるが, mysqld という名前でサーバが起動していることがわかる.

# ps aux | grep mysql

  mysql     9781  0.3  3.6 653604 74600 ?        Ssl  13:43   0:00 /usr/sbin/mysqld
  root      9831  0.0  0.0  12264   980 pts/0    S+   13:44   0:00 grep mysql

# exit 

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

SQL のコンソールからデータベースの操作を行う. なお, デフォルトでは root ユーザに「UNIX_SOCKET Authentication Plugin」が有効にされているため, 以下のように sudo -s すればパスワードは無し (エンターを打鍵するだけ) でデータベースにアクセスすることができる (一般ユーザが mysql -u root -p とすることはできない).

$ sudo -s

# mysql -u root -p

  Enter password:  <エンターキーを打鍵>
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 2
  Server version: 10.1.37-MariaDB-0+deb9u1 Debian 9.6           (MariaDB であることがわかる)

  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  MariaDB [(none)]>  show databases;   (存在するデータベースの表示)

     +--------------------+
     | Database           |
     +--------------------+
     | information_schema |
     | mysql              |
     | performance_schema |
     +--------------------+
     3 rows in set (0.00 sec)

   MariaDB [(none)]> use mysql;

   MariaDB [mysql]> select user, plugin  from user;

     +----------+-------------+
     | user     | plugin      |
     +----------+-------------+
     | root     | unix_socket |  (<--「UNIX_SOCKET Authentication Plugin」が有効なのがわかれる )
     +----------+-------------+
     1 rows in set (0.00 sec)

ユーザの作成をする. ユーザ名 (以下の例では hogehoge. 自分のユーザ名に置き換えること) とパスワード (以下の例では YOUR_PASSWD. 適宜自分のパスワードに置き換えること) を適宜設定すること. ホスト名 (以下の例では localhost) は変更しなくて良い.

MariaDB [(none)]> create user 'hogehoge'@'localhost' identified by 'YOUR_PASSWD';

   Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user, plugin from user;

   +----------+-------------+
   | user     | plugin      |
   +----------+-------------+
   | root     | unix_socket |
   | hogehoge |             |  (ユーザ hogehoge が増えていることがわかる)
   +----------+-------------+ 
2 rows in set (0.00 sec)

作成したユーザに対して, MySQL の管理者権限 (ALL PRIVILEGES) を設定する. "*.*" とすることで, 全てのデータベースの全てのテーブルという意味になる. ユーザ名 (以下の例では hogehoge) は自分のユーザ名に置き換えること.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'hogehoge'@'localhost';

   Query OK, 0 rows affected (0.00 sec)

データベース iotex を作成する.

MariaDB [(none)]> create database iotex;

   Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;

   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | iotex              |    (<-- この行が増えていることを確認)
   | mysql              |
   | performance_schema |
   +--------------------+
   4 rows in set (0.00 sec)

ユーザとデータベースを作成したら SQL コンソールからログアウトする.

MariaDB [(none)]> exit;

   Bye

課題

  • 動作確認のために, 以下のテーブルを作成せよ. テーブルの作成, データの挿入, データの表示に用いた 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 テーブル名