ここでは,Ubuntu (IPアドレス 192.168.58.101)にインストールした MySQL にデータベースを作成し,リモートホスト (Windows, Mac,または Ubuntu) からアクセスできるように設定します.なおリモートホストの IPアドレスは 192.168.58.100 とします.あらかじめ次のページを順に参考にして仮想開発環境を構築します.
MySQL に管理者権限(root ユーザ)でログインします.データベースの一覧を表示するには SHOW DATABASES; コマンドを利用します.管理者権限では全てのデータベースを利用することができます.
vagrant@ubuntu2204:~$ mysql -u root -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES; ⏎
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
管理者権限があるとデータベースを作成することができます.例えば testDB いう名称のデータベースを作成します.
mysql> SHOW DATABASES; ⏎
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> CREATE DATABASE testDB; ⏎
Query OK, 1 row affected (0.01 sec)
mysql> SHOW DATABASES; ⏎
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testDB |
+--------------------+
5 rows in set (0.00 sec)
mysql>
ユーザを作成し,そのユーザに testDB データベースへのアクセス権限を与えます.ユーザ情報は mysql データベースの user テーブルに格納されています.具体的には CREATE USER コマンドで localhost から接続可能な dbuser というユーザを作成し,パスワードを設定します.その後,GRANT コマンドで testDB の全てのテーブルに対して,全ての権限をそのユーザに許可します.その後,FLUSH PRIVILEGES コマンドで権限の変更を有効化します.
mysql> USE mysql; ⏎
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SELECT User, Host FROM user; ⏎
+------------------+-----------+
| User | Host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql> CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'hogehogehoge'; ⏎
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL PRIVILEGES ON testDB.* TO 'dbuser'@'localhost'; ⏎
Query OK, 0 rows affected (0.02 sec)
mysql> FLUSH PRIVILEGES; ⏎
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT User, Host FROM user; ⏎
+------------------+-----------+
| User | Host |
+------------------+-----------+
| dbuser | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
mysql> EXIT ⏎
Bye
vagrant@ubuntu2204:~$
上で作成したユーザ (dbuser) で MySQL にログインします.このユーザは testDB データベースにだけ権限が付与されています.このため,root ユーザで表示されていた mysql データベースや sys データベースを見られないことに注意していください.また,利用するデータベースを変更するには USE コマンドを使います.
vagrant@ubuntu2204:~$ mysql -u dbuser -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES; ⏎
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| testDB |
+--------------------+
3 rows in set (0.00 sec)
mysql> USE testDB; ⏎
Database changed
mysql>
testDB データベースに staffs テーブルを作成してみます.このテーブルは id,name,age,department という 4 つの属性(フィールド,列)を持つものとします.
mysql> SHOW TABLES; ⏎
Empty set (0.00 sec)
mysql> CREATE TABLE staffs (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(32),
age INT,
department VARCHAR(32)
)
ENGINE=InnoDB CHARACTER SET utf8mb4; ⏎
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW TABLES; ⏎
+------------------+
| Tables_in_testDB |
+------------------+
| staffs |
+------------------+
1 row in set (0.00 sec)
mysql>
テーブルの定義を確認するひとつのコマンドが DESC です.コマンドの最後には ; または \G を入力する必要があります.; では表形式で結果が出力され,\G では縦に並べて結果が出力されます.なお,日本語 Windows 環境では円マークでバックスラッシュを入力できます.
mysql> DESC staffs; ⏎
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| age | int | YES | | NULL | |
| department | varchar(32) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> DESC staffs\G ⏎
*************************** 1. row ***************************
Field: id
Type: int unsigned
Null: NO
Key: PRI
Default: NULL
Extra: auto_increment
*************************** 2. row ***************************
Field: name
Type: varchar(32)
Null: YES
Key:
Default: NULL
Extra:
*************************** 3. row ***************************
Field: age
Type: int
Null: YES
Key:
Default: NULL
Extra:
*************************** 4. row ***************************
Field: department
Type: varchar(32)
Null: YES
Key:
Default: NULL
Extra:
4 rows in set (0.00 sec)
mysql>
テーブルの定義情報を確認するためのもうひとつのコマンドが SHOW CREATE TABLE です.このコマンドでは MySQL のストレージエンジンの種類 (InnoDB が標準,そのほかに MyISAM など) や文字コードなどの情報も確認で可能です.
mysql> SHOW CREATE TABLE staffs; ⏎
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| staffs | CREATE TABLE `staffs` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`age` int DEFAULT NULL,
`department` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE staffs\G ⏎
*************************** 1. row ***************************
Table: staffs
Create Table: CREATE TABLE `staffs` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`age` int DEFAULT NULL,
`department` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql>
テーブルにデータを投入するには INSERT コマンドを利用します.このとき,複数のデータを一気に投入できること,また,id フィールドには AUTO_INCREMENT が設定されているため自動的に id が設定されていることに注意してください.
mysql> INSERT INTO staffs (name, age, department) VALUES
('藤川',23,'営業部'),
('藤本',35,'人事部'); ⏎
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM staffs; ⏎
+----+--------+------+------------+
| id | name | age | department |
+----+--------+------+------------+
| 1 | 藤川 | 23 | 営業部 |
| 2 | 藤本 | 35 | 人事部 |
+----+--------+------+------------+
2 rows in set (0.01 sec)
mysql> INSERT INTO staffs (name, age, department) VALUES
('藤枝',32,'製造部'),
('藤原',48,'営業部'),
('藤森',44,'人事部'),
('藤平',28,'製造部'),
('藤谷',38,'営業部'); ⏎
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM staffs; ⏎
+----+--------+------+------------+
| id | name | age | department |
+----+--------+------+------------+
| 1 | 藤川 | 23 | 営業部 |
| 2 | 藤本 | 35 | 人事部 |
| 3 | 藤枝 | 32 | 製造部 |
| 4 | 藤原 | 48 | 営業部 |
| 5 | 藤森 | 44 | 人事部 |
| 6 | 藤平 | 28 | 製造部 |
| 7 | 藤谷 | 38 | 営業部 |
+----+--------+------+------------+
7 rows in set (0.00 sec)
mysql> exit ⏎
%
次に,リモートのクライアントからデータベースサーバにログインするためにリモートユーザの登録を行います.サーバ側の操作で root ユーザで MySQL にログインします.ユーザ情報が格納されているのは mysql データベースです.
vagrant@ubuntu2204:~$ mysql -u root -p ⏎ Enter password: # パスワードを入力(表示されない) Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES; ⏎ +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | testDB | +--------------------+ 5 rows in set (0.01 sec) mysql>
ユーザの一覧を確認します.利用するデータベースを USE で指定しなくとも,データベース名.テーブル名 でデータを取得できます.dbuser というユーザが登録されていますが,localhost からのアクセスしか許可されていません.
mysql> SELECT User, Host FROM mysql.user; ⏎
+------------------+-----------+
| User | Host |
+------------------+-----------+
| dbuser | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
mysql>
リモートからアクセスできるように IP アドレス(ここでは 192.168.56.100)を指定して dbuser を作成し,パスワードを設定します.さらに,testDB データベースの全てのテーブルに権限を与えます.
mysql> CREATE USER 'dbuser'@'192.168.56.100' IDENTIFIED BY 'hogehogehoge'; ⏎ Query OK, 0 rows affected (0.04 sec) mysql> GRANT ALL PRIVILEGES ON testDB.* TO 'dbuser'@'192.168.56.100'; ⏎ Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; ⏎ Query OK, 0 rows affected (0.02 sec) mysql>
ユーザが登録できていることを確認します.
mysql> SELECT User, Host FROM mysql.user; ⏎ +------------------+----------------+ | User | Host | +------------------+----------------+ | dbuser | 192.168.56.100 | | dbuser | localhost | | debian-sys-maint | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+----------------+ 7 rows in set (0.00 sec) mysql>