ここでは,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>