はじめに
初歩的なSQLコマンドをまとめてみました。で基本的なSQLコマンドを自分なりに整理してみたけれども、ちょこちょこ間違えてるところもあったし、SQLの理解を深めるにはやはりデータベースを作って回数こなさないとね。
というわけで、自宅のMacにMySQLを入れてデータベースを作っていきます。
単なる学習目的だとなかなか興味が湧かず続かないので、ボートレース競技を題材に簡単なデータベースの作成です。
訓練所では、そろそろ求職活動も始まり、指名求人の来ないオッチャンとしては、就職にしくじった時のためにも、データベース作成の最終目標を機械学習で予想データを出すところまでもって行きたいところです、ガッポガッポといきたいところです。
開発環境は
・macOS Monterey (12.2.1)
・MacBookPro (2019)
・VSCode (1.64.2) 拡張機能:MySQL (v0.4.1),Python (v2022.0.1814523869)他
・Python (3.9.7)
です。
今回のお品書き
- MySQLのインストール
- データベースの作成
- データベースのユーザー作成
3-1. ユーザーの作成
3-2. ロールの作成
3-3. 権限の作成
3-4. ロールの割り当て
となっております。
1.MySQLのインストール
公式サイトからインストーラーをダウンロードしてもいいんですけど、最近はHomebrewでインストールってのが多いみたいなので、右にならえでbrewです。
samisnotmaydog@MacBook ~ % brew install mysql
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
(途中省略)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
インストールとアンインストール繰り返してたりするので、ちょっと再現が入ってますが、確かこんな感じだったとおもいます。
MySQLを起動します。起動はbrew services start mysql
でもmysql.server start
でもできるみたいです。違いはなんなんでしょうか?調べておきます。
と思ったらありました貼っておきます、ありがたいです。
Macの再起動後にMySQLが起動するかしないかの違いみたいですね。
では、brew services start mysql
で起動させていきます。
停止させるときは brew services stop mysql
ですね、解りやすいですね。
samisnotmaydog@MacBook ~ % brew services start mysql
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)
samisnotmaydog@MacBook ~ % mysql -u root -p
Enter password:
ここからは、そのままターミナルでの作業ですが、MySQLに入っていきます。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28 Homebrew
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> SELECT VERSION();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
1 row in set (0.00 sec)
バージョンは8.0.28でした。
VScodeにはMySQLの拡張機能を入れてあるのですが、訓練所のWindows+XAMPPではうまいこと接続できていたのですが、今回は接続ができませんでした。
原因は認証形式の違いによるとのことなので、設定を変えていきます。
を参考にしました。助かりました。
では、認証方法を変更して、VSCodeでもMySQLに接続できるようにしておきます。
mysql> use mysql
Database changed
mysql> SELECT user, plugin FROM user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
| root | caching_sha2_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)
mysql> ALTER USER 'root'@'localhost'
-> IDENTIFIED WITH mysql_native_password
-> BY 'チョメチョメ';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT user, plugin FROM user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
| root | mysql_native_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)
ユーザー認証をパスワード認証にしたら,VSCodeでもログインできました。
今回はこのままターミナルで作業を続けます。
ちなみに、チョメチョメはこうゆう意味(by wikipedia)です、昭和なオヤジなもんでスイマセン。
2.データベースの作成
では、データベースを作ります、名前は 'boatraceDB' です。
mysql> CREATE DATABASE boatraceDB;
Query OK, 1 row affected (0.01 sec)
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| boatraceDB |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
出来てますね、まだ簡単です。
3.データベースのユーザー作成
訓練所ではデータベースの操作は 'root' で作業を進めていましたが、今回は別のユーザーを作って作業していきます。
単純にユーザーを作ればいいのですが、それだけでは面白くないので、ユーザーに直接権限を設定せずにロールを作成して、ユーザーにロールを付与する2段構えにトライします。
MySQL 8.0 リファレンスマニュアル / GRANT ステートメント と
の記事を参考に作成していきます、ありがとうございます。
3-1.ユーザーの作成
ユーザー名は 'sam' で、パスワード認証にします。
認証方式はコレしかまだ理解できません。
mysql> CREATE USER sam IDENTIFIED BY 'チョメチョメ';
Query OK, 0 rows affected (0.01 sec)
3-2.ロールの作成
競艇データベースの作業用の権限を 'boatdb_dev' と名付けます。
mysql> CREATE ROLE boatdb_dev;
Query OK, 0 rows affected (0.01 sec)
まだロール(役割)を割り当てただけで、具体的な役割データベースに対して許可されている操作や出来ることは、なにも決められていません。
3-3.権限の作成
GRANT文で作成しますが、
/*GRANT 要るとこだけ*/
GRANT priv_type [(column_list)][, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_or_role [, user_or_role] ...
色々細かに設定できますが、今回は掘り下げるの別の機会として。。。とりあえずデータベース管理以外の権限を放り込んであります。
mysql> GRANT ALTER,CREATE,CREATE VIEW,DELETE,DROP,EVENT,EXECUTE
,INDEX,INSERT,LOCK TABLES,REFERENCES,SELECT,SHOW VIEW,TRIGGER,UPDATE
ON boatraceDB.* TO boatdb_dev;
Query OK, 0 rows affected (0.00 sec)
'データベース名.*' なのは見逃してました、何回もエラーって言われました。
そんな怒らんでもエエのに。
3-4.ロールの割り当て
ユーザー' sam' に 'boatdb_dev' ロールを付与します。
mysql> GRANT boatdb_dev TO sam;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM mysql.role_edges;
+-----------+------------+---------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+------------+---------+---------+-------------------+
| % | boatdb_dev | % | sam | N |
+-----------+------------+---------+---------+-------------------+
1 row in set (0.00 sec)
確認できました。
今日はここまでにします。
mysql> exit;
Bye
samisnotmaydog@MacBook ~ % brew services stop mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
samisnotmaydog@MacBook ~ %
次回に続く
時間を作って、最終目標の予想までどのくらい時間が掛かるか解りませんが、コツコツと続けていければと思います。