2024 年度 データベースII : MariaDB のインストールと利用

はじめに

自分の VM (仮想マシン) にログインして SQL 演習を行うための準備として MariaDB のインストールとセットアップを行う. 演習室の Windows にインストールされている putty や Windows Terminal を用いること.

インストール

MariaDB (MySQL) 関連パッケージをインストールする.

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

設定

初期設定

用意されているスクリプトを用いて MariaDB の初期設定を行う.

$ sudo mysql_secure_installation

  # root パスワードの入力
  Enter current password for root (enter for none):
  OK, successfully used password, moving on...

  # [Unix_Socket] 認証に切り替えるか否か
  # Yes にすると,Linux ユーザはパスワード無しで MariaDB に接続可能に
  Switch to unix_socket authentication [Y/n] Y
  Enabled successfully!
  Reloading privilege tables..
   ... Success!

  # MariaDB root パスワードを設定するか否か
  # [Unix_Socket] を有効にしたので No でよい
  Change the root password? [Y/n] n
   ... skipping.

  # 匿名ユーザーは削除する
  Remove anonymous users? [Y/n] y
   ... Success!

  # root のリモートログインは無効とする
  Disallow root login remotely? [Y/n] y
   ... Success!

  # テストデータベースは削除する
  Remove test database and access to it? [Y/n] Y
   - Dropping test database...
    ... Success!
   - Removing privileges on test database...
    ... Success!

  # 特権情報をリロードする
  Reload privilege tables now? [Y/n] Y
   ... Success!

再起動する

$ sudo reboot

データベースのユーザ設定

コンソールからデータベースの操作を行う. なお, UNIX_SOCKET を有効にしたので,root ユーザでパスワード無しで データベースにアクセスできる.また,一般ユーザについては, データベース上でユーザ作成をする必要はあるが, パスワードを設定する必要はない.

$ sudo mysql -u root -p

  Enter password:  <エンターキーを打鍵>
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 30
  Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11

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

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

ユーザの作成をする. ユーザ名 (以下の例では hogehoge) を自分のユーザ名に置き換えること.

MariaDB [(none)]> create USER hogehoge@localhost ; (hogehoge は自分のユーザ名にすること)

  Query OK, 0 rows affected (0.004 sec)

また,全てのデータベースにアクセスできる権限を設定しておく.

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

   Query OK, 0 rows affected (0.00 sec)

ユーザを作ったら一度ログアウトする.

MariaDB [(none)]> quit

   Bye

データベースの作成およびテスト

作成したユーザで MySQL に改めてログインして, 演習用のデータベース (j4db) を作成する.

$ mysql -u hogehoge -p

  Enter password:     <-- [UNIX_SOCKET] が有効なので,そのままエンターを打鍵
  ...(略)...

  MariaDB [(none)]> create database j4db;

     Query OK, 1 row affected (0.00 sec)

  MariaDB [(none)]> show databases;

     +--------------------+
     | Database           |
     +--------------------+
     | information_schema |
     | j4db               |
     | mysql              |
     | performance_schema |
     | sys                |
     +--------------------+
     5 rows in set (0.00 sec)

作成したデータベース (j4db) に接続する.

MariaDB [(none)]> use j4db;

   Database changed

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

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

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

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

ここでは動作確認のために, 教科書の図 7.1 のテーブルを作成する.

MariaDB [j4db]> create table 履修情報 (学生 varchar(2), 科目 varchar(20), 教員 varchar(2), 学科 varchar(20), 学科長 varchar(2), primary key (学生,科目) );
Query OK, 0 rows affected (0.01 sec)

MariaDB [j4db]> insert into 履修情報 VALUES ("S1", "プログラム", "P1", "情報", "C1");
Query OK, 1 row affected (0.00 sec)

MariaDB [j4db]> insert into 履修情報 VALUES ("S1", "情報工学", "P2", "情報", "C1");
Query OK, 1 row affected (0.00 sec)

MariaDB [j4db]> insert into 履修情報 VALUES ("S2", "プログラム", "P1", "情報", "C1");
Query OK, 1 row affected (0.00 sec)

MariaDB [j4db]> insert into 履修情報 VALUES ("S2", "情報工学", "P3", "情報", "C1");
Query OK, 1 row affected (0.00 sec)

MariaDB [j4db]> insert into 履修情報 VALUES ("S3", "設計演習", "P4", "設計", "C2");
Query OK, 1 row affected (0.00 sec)

MariaDB [j4db]> select * from 履修情報;
+--------+-----------------+--------+--------+-----------+
| 学生   | 科目            | 教員   | 学科   | 学科長    |
+--------+-----------------+--------+--------+-----------+
| S1     | プログラム      | P1     | 情報   | C1        |
| S1     | 情報工学        | P2     | 情報   | C1        |
| S2     | プログラム      | P1     | 情報   | C1        |
| S2     | 情報工学        | P3     | 情報   | C1        |
| S3     | 設計演習        | P4     | 設計   | C2        |
+--------+-----------------+--------+--------+-----------+
5 rows in set (0.00 sec)

終えるときは, quit する.

MariaDB [j4db]> quit
Bye

演習用テーブルの移設

以前の SQL 演習で作成したテーブルを本サーバに移設する.

以前のサーバからのデータ出力

まずは演習サーバ (10.10.10.31) にログインする. 自分のユーザ (hogehoge) のデータベース (hogehoge) を ファイル出力する場合は以下のようにする.hogehoge は自分の 学生番号に置き換えること.

$ mysqldump -u hogehoge -p hogehoge > /tmp/mytable_jxxxx.sql

  Enter password:    <-- エンターキーを押すだけ

出力した mytable.sql は scp コマンドで自分のサーバへコピーすると良い.

$ scp /tmp/mytable_jxxxx.sql ユーザ名@10.10.xx.yy:~/

  The authenticity of host '10.10.24.50 (10.10.24.50)' can't be established.
  ED25519 key fingerprint is SHA256:19QAS+7I0gIr2pSz+EHExzZ4VU68JWsECsBvWCl79gI.
  This key is not known by any other names.
  Are you sure you want to continue connecting (yes/no/[fingerprint])? yes  <-- 入力

  sugiyama@10.10.24.50's password:
  mytable.sql                                            100% 9593     4.3MB/s   00:00

自分のサーバでの作業

演習用のテーブルを上記で作成した j4db に作成する. 先に転送してきた mytable.sql と,以下のコマンド

$ wget http://10.10.0.103/workbook.sql

で取得できる workbook.sql を j4db データベースに入力する.

これらのファイルを mysql コマンドでデータベース j4db に入力する. ユーザ名 (以下の例では hogehoge) は適宜変更すること

$ mysql -u hogehoge -p j4db < workbook.sql

   Enter password:    (<-- エンターキーを入力するだけ)

確認する.show tables すると数多くのテーブルが作成されていることがわかる. なお,ユーザ名 (以下の例では hogehoge) は適宜変更すること

$ mysql -u hogehoge -p

  Enter password: 
  ...(略)...

  MariaDB [(none)]> use j4db;

     Database changed

  MariaDB [j4db]> show tables;

     +----------------+
     | Tables_in_j4db |
     +----------------+
     | access_log     |
     | author         |
     .....(以下, 略)...........

  MariaDB [j4db]> select * from books;

     ....(本の情報が表示される)....