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;
....(本の情報が表示される)....