見出し

MySQLをうす〜く使ってみる

   2023年04月13日     9分で読めます

この記事は,Qiitaに以前投稿した記事:MySQLをうす〜く使ってみるを移植したものになります.


概要

データベースを使ってみたいという安直な理由でMySQLを触ってみます.

本当に1ミリも知識がない(←ここ重要)&環境もないため,installからデータベース操作まで,もがきながらやってみます. (とにかく使ってみたいというだけなので,細かいところは全無視でよく分かっていなくても進めています)

本記事はその備忘録として作成します.

1. MySQLのInstallと初期設定

brew install mysql

遅くなりましたが,筆者はmacユーザーなのでmac OSでの環境構築になります.

mysql --version
-> mysql  Ver 8.0.27 for macos11.6 on x86_64 (Homebrew)

次のコマンドを実行すると,MySQLを起動することができます.

brew services start mysql
mysql.server start

止めたい時は,次のコマンドを実行しましょう!

brew services stop mysql

初回は,mysql_secure_installationでパスワードを設定する必要があります.割と強固なものにした方が良さそうです(ポリシー的に) セキュリティについて色々聞かれますが,基本「yes」で大丈夫だと思います.

mysql_secure_installation

次のコマンドを実行してログインしてみましょう!

mysql --user=root --password

ログインが成功したら,MySQLを使う準備はバッチリです! 次の章から実際に中身を覗いてみましょう!

2. MySQLを使ってみる

MySQLの主なコマンドから確認していきます. 最初はshow databasesです. データベースを一覧表示するためのコマンドです.

何か色々表示されていますが,よく分からないので今回はパスです.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

続いてはCREATE DATABASEです. 新しくデータベースを作成したい時に使います. 実行してみると,新しく追加されていることが分かります!

mysql> CREATE DATABASE db_sample;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db_sample          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

一覧表示した中からデータベースを選択したい場合にはuse db_sampleのように実行します. また,データベース中のテーブルを表示したい場合にはshow tablesを実行しましょう. 現在は作成してから何もいじっていないのでEmpty setになっていますね.

mysql> use db_sample;
Database changed
mysql> show tables;
Empty set (0.00 sec)

続いてはお馴染みCREATE TABLE文です. あるデータベース中で新しくテーブルを作成したいときに実行します. 今回はidとnameという2つのカラムを用意します.idはkeyであり,auto_incrementを引数に加えることで,データを追加する度に+1される設定にしています(初期値は1).nameは文字列ならオッケーとしています.

mysql> CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));
Query OK, 0 rows affected (0.03 sec)

作成したテーブルについて詳細に知りたい時にはDESCRIBE文を使います. keyが何か,default値は何か,typeの指定は何かを一眼で把握することができます.

mysql> DESCRIBE users;
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra          |
+-------+------+------+-----+---------+----------------+
| id    | int  | NO   | PRI | NULL    | auto_increment |
| name  | text | YES  |     | NULL    |                |
+-------+------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

続いてはINSERT INTO文です.新しくデータを追加したい時に使います. 今回はnameにtestという値を持ったuserを追加してみます. おまけに結果の抽出も行ってみましょう.テーブルからデータを取り出したい時にはSELECT文を実行します. SELECT文は奥が深いので詳細については省きます…

mysql> INSERT INTO users(name) VALUES ('test');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
|  1 | test |
+----+------+
1 row in set (0.00 sec)

3. 権限関係

本章では,MySQLのセキュリティポリシーや権限関係について見ていこうと思います.

MySQLでは,非常に厳しいセキュリティポリシーが設定されており,パスワードの要求水準が極めて高いです(長いパスワードを設定して入れなくなりがち). 趣味で使う分にはそこまで高いセキュリティ基準にしなくても良くない?ということで今回は設定を変えて行こうと思います. まずは,初期の設定がどんなものかSHOW variables like 'validate_password%'を実行してみましょう!

mysql> SHOW variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | X      |
| validate_password.dictionary_file    |        |
| validate_password.length             | X      |
| validate_password.mixed_case_count   | X      |
| validate_password.number_count       | X      |
| validate_password.policy             | X      |
| validate_password.special_char_count | X      |
+--------------------------------------+--------+
7 rows in set (0.02 sec)

上記でかなりタイトな設定になっていることが分かったので,自分なりの設定に変えてみましょう.変更したい時はset global XXXを実行します. 変更後もう一度SHOW variablesを実行すると,修正されていることが分かります.

mysql> set global validate_password.length={hoge};
mysql> set global validate_password.policy={hoge};
Query OK, 0 rows affected (0.00 sec)

続いては権限関係を見ていきます. CREATE USER文を実行すると,新規のユーザーを作成することができます.

mysql> CREATE USER 'hoge@localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

続いてGRANT文を見ていきます.このコマンドは権限を委譲する際に使われるもので,ユーザーごとにアクセスできるデータベース,機能を制限することができます.非常に細かく設定することができ,意図しないユーザーが意図しない操作を行えない仕組みがなされています. 今回はあるユーザーにあるデータベースに関する全権限を付与してみます.

mysql> grant all on sample_db.* to hoge@localhost;
Query OK, 0 rows affected (0.01 sec)

あるユーザーに与えられた権限の一覧を見たい時にはSHOW GRANTSを実行します. 先ほど全権限が付与されたので,ALL PRIVILEGESとなっていることが分かります.

mysql> show grants for hoge@localhost;
+--------------------------------------------------------------------+
| Grants for hoge@localhost                                          |
+--------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `sample_db`.* TO `hoge`@`localhost`        |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

今回はここまで.

本当に浅く触っただけでしたが,データベースの仕組みを完璧に理解できました(できていない) 次回以降は実際にwebアプリに組み込んだりと,何かしら形にできたらいいなあと考えています.

参考文献等

本記事を作成するに当たって,以下のサイトを参考にしました.

  1. MySQL公式ドキュメント