MacでMySQLを導入

## 経緯
業務ではwindowsを使用しているが自宅のPCはmacなので自宅の環境でもDB操作を行えるようにMySQLを導入する。

## 大まかな流れ
1.Homebrewをインストールする
2.MySQLをインストールする
3.MySQLの起動
4.DBの作成
5.まとめ

それでは始めていきます。

## 1.Homebrewをインストールする
### そもそもHomebrewとは？
>アップル（またはあなたのLinuxシステム）が提供していないあなたの必要なものをインストールできます。
引用元：https://brew.sh/ja/

とのことです。
Macのターミナルを使用しコマンドで様々なソフトをインストールしたりする際に必要なものみたいですね。
今回はそのHomebrewを使用して進めていきます。

### Homebrewをインストール
[brewの公式サイト](https://brew.sh/ja/)にあるように、下記のコマンドを使用してインストールします。
```java
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

下記のようにインストールが始まります。
その際にパスワードを入力する必要があるので入力してEnterを押すとインストールが始まります。
```terminal
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
==> Checking for `sudo` access (which may request your password)...
Password:
```
かなり時間がかかりますがsuccessfulになるまで待ちましょう。

### Homebrewがインストールされたか確認
インストールの確認にはターミナルで下記のbrewコマンドを使用します。
-vオプションをつけるとバージョンを確認できます。
```terminal
$ brew -v
```
下記のようにHomebrewのバージョンが表示されていれば問題なくインストールは完了です。
```terminal
$ brew -v
Homebrew 4.2.3
```


## 2.MySQLをインストールする
続いてHomebrewを使用して、MySQLをインストールします。

### MySQLをインストール
下記コマンドをターミナルで入力します。
```terminal
$ brew install mysql
```
下記のようにダウンロードが始まります。
```terminal
==> Downloading https://ghcr.io/v2/homebrew/core/mysql/manifests/8.2.0_1
################################################################################################################### 100.0%
==> Fetching dependencies for mysql: icu4c, ca-certificates, openssl@3, libevent, libcbor, libfido2, lz4, protobuf@21, zlib, xz and zstd

以下省略
```

### インストールしたmysqlの情報を確認する場合は、下記コマンドで。
```terminal
$ brew info mysql
```
### バージョン確認
```terminal
$ mysql --version
```
問題なければ下記のように表示されます。
```terminal
mysql  Ver 8.2.0 for macos12.6 on x86_64 (Homebrew)
```

## 3.MySQLの起動や停止など
ここまではMySQLのダウンロードまで記述してきましたがここからは実際に起動し、テーブルの作成等も進めていきます。

mysqlはインストールしただけでは起動していません。
利用する場合は起動をしましょう。
また、使い終わったら停止しておきましょう、バッテリー結構消耗しがちなので。

### MySQLの起動
MySQLを使用する際には下記コマンドで起動しなければいけません。
```terminal
$ mysql.server start
```
起動すると下記のように「SUCCESS」と表示されます。
```terminal
MacBook:~ hoge$ mysql.server start
Starting MySQL
...... SUCCESS! 
```

### MySQLの停止
起動したMySQLは使用しない場合には下記コマンドで都度停止しておきましょう。
```terminal
$ mysql.server stop
```
停止すると下記のように「SUCCESS!」と表示されます。
```terminal
MacBook:~ hoge$ mysql.server stop
Shutting down MySQL
. SUCCESS! 
```

### MySQLにログインする
下記コマンドでMySQLにログインしましょう。
```terminal
$ mysql -uroot
```

### MySQLのバージョン確認
下記コマンドでバージョンの確認が可能です。
```terminal
mysql> show variables like 'version';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| version       | 8.2.0 |
+---------------+-------+
1 row in set (0.26 sec)
```
### MySQLのユーザー確認
下記コマンドでユーザーの確認が可能です。
```terminal
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.03 sec)
```

### ユーザーの作成を行う
下記ユーザーを作成します。
ユーザ名：jkuroyanag
パスワード：hoge
```terminal
mysql> create user 'jkuroyanag'@localhost identified by 'hoge';
Query OK, 0 rows affected (0.23 sec)
```

### ユーザの再確認
　jkuroyanagが作成されていることを確認。
```terminal
mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| jkuroyanag       | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.13 sec)
```
※ユーザーの削除は下記コマンドで行う。
```terminal
mysql> drop user 'jkuroyanag'@localhost;
Query OK, 0 rows affected (0.20 sec)
```

## 4.DBの作成
### 実際に使用するmydbというデータベースを作成していきます。
```terminal
mysql> create database mydb;
Query OK, 1 row affected (0.16 sec)
```
下記コマンドでmydbというデータベースが作成されたことを確認できました。
```terminal
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)
```
### 作成したDBにチェックアウト
テーブル等を作成する前にどのDBを使用するか下記のように宣言する必要があります。
```terminal
mysql> use mydb
Database changed
```
### テーブルの作成
今回はdogというテーブルを作成します。
```terminal
mysql> create table dog(
 dog_id INT(10) NOT NULL,
 dog_name VARCHAR(30) NOT NULL,
 PRIMARY KEY(dog_id)
 );
Query OK, 0 rows affected, 1 warning (0.37 sec)
```

無事テーブルが作成されました。
```terminal
mysql> desc dog;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| dog_id   | int         | NO   | PRI | NULL    |       |
| dog_name | varchar(30) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
```

### テーブルにデータを挿入
今回はmokuとmugiという2匹の犬情報をinsertします。
```terminal
mysql> insert into dog values(1,"moku");
Query OK, 1 row affected (0.11 sec)

mysql> insert into dog values(2,"mugi");
Query OK, 1 row affected (0.01 sec)
```
下記のようにデータもinsertされていることを確認。
```terminal
mysql> select * from dog;
+--------+----------+
| dog_id | dog_name |
+--------+----------+
|      1 | moku     |
|      2 | mugi     |
+--------+----------+
2 rows in set (0.05 sec)
```
ひとまずbrewでのmySQLはここまでとします。
他にも色々なことができるので興味がある方がmysqlについて調べてみてください。

## 5.まとめ
なんとかこれで自宅のmacでもDB操作が行えるようになりました。
これからintellijにDB接続をしてspring+myBatisでコードを書いていきたいと思います。
雑にまとめてしまっているので何か間違っていたり気になる点があればご指摘いただけますと幸いです。
引き続き頑張ります。