AWSのMySQL初期セットアップ

## はじめに
最初からAWSにインストールされているmysqlの設定を行うもの。

## 対象
・mysqlをセットアップしたい人

## MySQLセットアップ手順
MySQLを利用する前の初期セットアップ手順を書き記します。

### MySQLサーバーを起動する
最初はMySQLサービスが起動していないためサービスを起動する必要があります。

```bash
$ sudo service mysqld start
Starting mysqld:                                           [  OK  ]
```

### MySQLにrootユーザーでログインする
最初は自分で作成したユーザーが存在しないためスーパーユーザーであるrootユーザーでログインします。

```bash
$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.59 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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.
```

### データベースを作成する
今回は`studywebapp`という名のデータベースを作成していきます。

```sql
mysql> create database studywebapp;
Query OK, 1 row affected (0.00 sec)
```

### ユーザーを作成する
ここではユーザー名：`default_user`を作成していきます。
パスワードはxxxxxの部分をご自身のパスワードに置き換えて設定してください。
他サーバーに接続することがないのであれば、サーバーはlocalhostで問題ありません。

```sql
mysql> create user default_user@localhost identified by 'xxxxx';
Query OK, 0 rows affected (0.00 sec)
```

### ユーザーに権限を付与する
作成したユーザーにstudywebappデータベースに参照・更新・削除など全ての動作が実行できる権限を与えます。

```sql
mysql> grant all on studywebapp.* to default_user@localhost identified by 'xxxxx';
Query OK, 0 rows affected (0.00 sec)
```

### 作成したユーザーで、データベースにアクセス
一旦mysqlを終了して、作成した`default_user`ユーザーで`studywebapp`データベースにアクセスします。

```bash
$ mysql -u default_user -p -D studywebapp
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.59 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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>`が表示されていたら設定完了です。

## 番外編：文字コードをUTF-8にする
デフォルトだと一部の項目に文字コードUTF-8が設定されていないため、個別で設定する必要があります。

### 現在設定されている文字コードを確認する
では、現在設定されている文字コードを確認していきましょう。
自分で作成したユーザーでログインをして確かめて下さい。

```sql
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```
今回は以下の項目がUTF-8に設定されていないため、個別で設定していきます。

- <font color="red">character_set_database</font>：現在参照しているデータベースの文字コード
- <font color="red">character_set_server</font>：データベース作成時のデフォルト文字コード

先ほど作成したデータベース`studywebapp`は、データベース作成時のデフォルト文字コードがUTF-8に設定されていないため、文字コードlatin1に設定されてしまっていることが分かります。

### 作成したデータベースの文字コードを変更する
既に作成しているデータベースの文字コードを設定していきましょう。

```sql
mysql> ALTER DATABASE studywebapp default character set utf8;
Query OK, 1 row affected (0.00 sec)
```

### サーバーの設定を行う
では、一旦MySQLをログアウトしてターミナルに戻って下さい。
viで`/etc/my.cnf`ファイルを開き設定をしていきます。

```bash
$ sudo vi /etc/my.cnf                                                                                                                                                                                         
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8 # 追加

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client] #追加
default-character-set=utf8 #追加
```

## MySQLサービスを再起動する
設定ファイル`/etc/my.cnf`を変更したときは、設定を反映するために必ず再起動が必要となります。

```bash
$ sudo service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
```

### 文字コードを再確認する
再度、MySQLにログインして文字コードを確認してみましょう。

```sql
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
```

全てUTF-8に設定されていれば完了です！！


## 最後に・・・
MySQLの設定は頻繁に実施することではないので忘れがちになってしまいますが、またMySQLの設定を実施するときが来たら本記事を思い出してみて下さい！