CentOS7にMySQLをインストールして初期設定するまで

#環境
 - macOS 10.12.6
 - MacBook pro 2016
 - VirtualBox 5.2.18
 - CentOS 7.6-1810
 - MySQL 5.7.25

#リポジトリの追加
MySQLはyumコマンドでインストールします。
CentOS 7では公式のyumリポジトリにMySQLがないので、まずは[MySQLの公式](https://dev.mysql.com/downloads/repo/yum/)が用意しているリポジトリを追加します。
※ `yum` と `リポジトリ` に関しては、[こちらの記事](https://qiita.com/nooboolean/items/9754997977d90d8aa9b5)をご覧ください。

###rpmファイルをインストール
>まず、MySQL Yum リポジトリをシステムのリポジトリリストに追加します。この操作は一度だけ必要で、MySQL が提供する RPM をインストールすることで実行できます。次の手順に従います。 

[MySQL公式](https://dev.mysql.com/doc/refman/5.6/ja/linux-installation-yum-repo.html)より

ってことなので、公式が用意しているrpmファイルをインストールすれば、yumのリポジトリもいい感じに追加してくれるみたいです。yumコマンドの`localinstall`オプションを使うことでリモートにあるrpmファイルをインストールすることができます。
rpmコマンドを使ってのインストールも可能ですが、依存関係とかを考慮したインストールまではしてくれないので、yumでインストールしましょう。

```
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm 
```

上のURLはリモートにあるrpmファイルをインストールするためのもので、[公式サイト](https://dev.mysql.com/downloads/repo/yum/)の、下の画像の赤枠部分を、`http://dev.mysql.com/get/`の後に付け加えて完成です。（お使いのOSに合わせたものを選んでください）<img width="1037" alt="スクリーンショット 2019-01-25 2.42.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/183984/d696264d-011b-2504-83a4-e562a2fb9cec.png">

###リポジトリの確認
`/etc/yum.repos.d`配下に、`mysql-community-source.repo`と`mysql-community.repo`というリポジトリが作成されてるはずです。

```
# cd /etc/yum.repos.d/
# ls
mysql-community-source.repo  mysql-community.repo
```
このリポジトリが作成されて入れば、リポジトリの追加の確認は完了

#yumでインストール
まずは、リポジトリの反映の確認。

```
# yum info mysql-community-server
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * extras: ftp-srv2.kddilabs.jp
 * updates: ftp.jaist.ac.jp
利用可能なパッケージ
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 5.7.25
リリース            : 1.el7
容量                : 165 M
リポジトリー        : mysql57-community/x86_64
要約                : A very fast and reliable SQL database server
URL                 : http://www.mysql.com/
ライセンス          : Copyright (c) 2000, 2018, Oracle and/or its affiliates.
                    : All rights reserved. Under GPLv2 license as shown in the
                    : Description field.
説明                ...（省略）
```
こんな感じでパッケージ情報が出てくれていれば、確認OK
あとは、インストール

```
# yum install -y mysql-community-server
```
うまくいけば、`完了しました！`と出るはずです。

#MySQLのデーモンの起動と停止
###確認
しっかりMySQLが入ってるかの確認

```
# mysqld --version
```

###起動
```
# systemctl start mysqld
```
CentOS 6 以下は、`service`コマンドを使ってください。
###起動の確認
```
# systemctl status mysqld
```
たくさん文字が出てきますが、`Active: active (running)`とどこかにあれば動いている証しです。
###停止
```
# systemctl stop mysqld
```

###自動起動の設定
これは、CentOSの起動・再起動の際に一緒にmysqldも起動するようにする設定です。
以下のコマンドでOK

```
# systemctl enable mysqld
```
CentOS 6 以下は、`chkconfig`コマンドを使ってください。

#MySQLの初期設定
###rootユーザーでログイン
MySQLは初期状態だと、ユーザーがrootしかいないので、一旦rootで入らなくてはならないです。
しかし、

```
# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
```

このように、パスワードなしでアクセスしようとすると怒られます。
###初期パスワードの確認
当然、rootでアクセスするにはパスワードが必要なのですが、初期パスワードが何かわからないので、確認する必要があります。
初期パスワードは、mysqlのログの中で確認できます。ログの中身を`root`でgrepした時の一番最初の行にちらっと記載されています。ログファイルは`/var/log/mysqld.log`です

```
# cat /var/log/mysqld.log | grep root
2019-01-24T17:10:57.681293Z 1 [Note] A temporary password is generated for root@localhost: [ここにパスワードの文字が記載されているはず]

# mysql -u root -p //上記のパスワードでログイン
Enter password: 
```

###パスワードの変更
rootでログインできたら、自分の分かりやすいパスワードに変更しちゃいましょう！
変更の仕方は、以下です。
**※8文字以上かつ英大文字・小文字・数字・記号を含めないとエラーで返されます。**

```
# SET PASSWORD = PASSWORD('任意のパスワード')
```
これで変更完了！次回からは自分が設定したパスワードでログインしよう！

###文字コードの確認と変更

設定されている文字コードの確認は以下で行えます。

```
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/ |
+--------------------------+----------------------------+

```

上の表記は、以下らしいです。[この方の記事](https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a)より

>character_set_client : クライアント側で発行したsql文はこの文字コードになる
character_set_connection : クライアントから受け取った文字をこの文字コードへ変換する
character_set_database : 現在参照しているDBの文字コード
character_set_results : クライアントへ送信する検索結果はこの文字コードになる
character_set_server : DB作成時のデフォルトの文字コード
character_set_system : システムの使用する文字セットで常にutf8が使用されている

これを全部`UTF-8`にしてしまった方が良いみたい（エラーの原因になるから統一した方がいいってことかな？何故だろう…）

mysqlの設定ファイルは`/etc/my.cnf`です。
一回mysqlからログアウトして、設定しましょう。

```
# vi /etc/my.cnf

//以下をファイルの末尾に追記
character_set_server=utf8
skip-character-set-client-handshake

# systemctl restart mysqld //再起動させて変更を反映させる
```

mysqlに再度ログインして変更されているか確認してみましょう！

```
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/ |
+--------------------------+----------------------------+

```
全部`UTF-8`になってますね！
これで初期設定終わり！お疲れ様でした！