MySQL5.6から5.7にアップグレードする手順

#はじめに
初心者の備忘として。
Laravel×MySQLで学習を進めていると、結構最初の段階でエラーが出て進めなくなった。調べてみたところMySQLのアップグレードで解消できる模様。アップグレードがてら、今後の参考にしようということでまとめてみます。

■参考になる(かもしれない)人
・MySQL5.6から5.7にアップグレードしたい人
・ドットインストールの**ローカル開発環境の構築 [macOS版]**のレッスンでMySQLをインストールした人(MySQLを、MacでYumリポジトリを使ってインストールした人)

## 【困った① いろいろなやり方があったけど…】
アップグレードについて調べていると、いろいろな方法が。[この記事(Qiita)](https://qiita.com/tachitechi/items/b59278a16f636651410f)とか[この記事(企業発信)](https://optimal-sdw.com/blog/code-db/article_37#sec01)はサーバーの停止とかMySQLの削除とかしているからそれは必須？違う箇所があるけどどっちが正しい？どれをやっても同じ？

調べても調べてもわからないので、初めてMySQLの公式[ドキュメント](https://dev.mysql.com/doc/refman/5.7/en/upgrade-before-you-begin.html)をみてみることに。

> アップグレード手順は、プラットフォームと初期インストールの実行方法によって異なります。現在のMySQLインストールに適用される手順を使用します。
> 
- Windows以外のプラットフォームでのバイナリおよびパッケージベースのインストール…
- MySQL Yumリポジトリを使用したEnterprise LinuxプラットフォームまたはFedoraへのインストール…
- MySQL APTリポジトリを使用したUbuntuへのインストール…
- MySQL SLESリポジトリを使用したSLESへのインストール…
- Dockerを使用して実行されるインストール…
- Windowsでのインストール…

・・・なるほど。初期インストールの実行方法によってアップグレードの方法は異なるのか。しかも現在インストールされているバージョンによっても変わってくる模様。だからいろいろな方法が紹介されているのか！
ここで新たな問題が。

## 【困った② どうやってMySQLをインストールしたのか覚えていない…】
初期インストールの実行方法によってアップグレードする方法が違うのはわかったけど…どうやってインストールしたっけ？
ドットインストールの「ローカル開発環境の構築 [macOS版]」を進めていたら、いつの間にかPHPとかMySQLが使えるようになっていたな(確か)、と思い出しもう一度動画をおさらい。
仮想マシンの設定をしよう(#7)でgitをインストールし、gitを使ってアプリケーション設定用のスクリプトをDL・実行していた。その中でphpやMySQLが、yum を使ってインストールされていた。つまりMacユーザでドットインストールでローカル開発環境を整えた場合、**MySQL Yumリポジトリ**を使用している模様。
同じ状況の人がいれば(いるのかな？)、これ以降の記事が参考になると思います(多分)。

【環境】
・Mac
・CentOS 6.8
・ローカル開発環境(Vagrant,virtualbox)

## 【困った③ じゃあどうやればいいの？】
[MySQL Yumリポジトリを使用したMySQLのアップグレード](https://dev.mysql.com/doc/refman/5.7/en/updating-yum-repo.html)をとりあえず読んでみた。箇条書きにしてみます。

- デフォで、自動で現在のリリースシリーズの最新バージョンにしてくれる（例えば、5.6.xの「.x」シリーズは自動的に更新される。5.7には更新されない。）
- 5.6から5.7に更新するには、5.6のサブリポジトリを無効にし、5.7のサブリポジトリを有効にする必要がある。
- 上の設定をした後、MySQLのアップグレードを行う

なるほど。なんとなくわかった（気がする）。


## STEP 0. yumのユーティリティツールをインストール(必要？)
後でインストールするMySQLのバージョンを5.7にするために5.6を無効化したりするのに利用するらしいから、上記で触れたドキュメントには記載がなかったけど実行してみた。「インストールしています」とかいろいろ表示されたから、必要だったのかな？？(誰か教えてください)
【余談】そもそもyumって何？？

```
[vagrant@localhost ~]$ sudo yum -y install yum-utils
```


## STEP 1. サブリポジトリの有効/無効の確認
MySQL Yumリポジトリ内のサブリポジトリを下記のコマンドで全て表示し、それぞれの有効・無効の確認をする。
ふむふむ、```mysql56-community```は有効で、```mysql57-community-・・・```は無効になっている（だからバージョンが5.6なのかな？）。

```
[vagrant@localhost ~]$  yum repolist all | grep mysql
mysql-connectors-community        MySQL Connectors Community        有効:    137
mysql-connectors-community-source MySQL Connectors Community - Sour 無効
mysql-tools-community             MySQL Tools Community             有効:     93
mysql-tools-community-source      MySQL Tools Community - Source    無効
mysql55-community                 MySQL 5.5 Community Server        無効
mysql55-community-source          MySQL 5.5 Community Server - Sour 無効
mysql56-community                 MySQL 5.6 Community Server        有効:    606
mysql56-community-source          MySQL 5.6 Community Server - Sour 無効
mysql57-community-dmr             MySQL 5.7 Community Server Develo 無効
mysql57-community-dmr-source      MySQL 5.7 Community Server Develo 無効
```

## STEP 2. サブリポジトリの5.6の無効化・5.7の有効化
MySQL 5.6シリーズのサブリポジトリを**無効**にして、MySQL 5.7シリーズのサブリポジトリを**有効**にする（ドキュメントの説明はちょっとややこしかった）。

```
[vagrant@localhost ~]$ sudo yum-config-manager --disable mysql56-community
[vagrant@localhost ~]$ sudo yum-config-manager --enable mysql57-community-dmr
```
ちなみに、```sudo yum-config-manager --enable mysql57-community
```と実行しても、```読み込んだプラグイン:fastestmirror```とだけ表示されて有効に変わらなかったので、他の記事も参考に```-dmr```をつけて実行したところ、ちゃんと有効に変わった。


## STEP 3. MySQLのアップグレード
```
[vagrant@localhost ~]$ sudo yum update mysql-server  //dnfが有効でない場合
```
※dnf有効の場合、```sudo dnf upgrade mysql-server```
【余談】・・・dnfって何？？



## STEP 4. 確認
ちゃんとMySQL5.7になっているか確認。

```
[vagrant@localhost ~]$ mysql --version
mysql  Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using  EditLine wrapper
```

## 参考
・[Windows以外のプラットフォームでのバイナリおよびパッケージベースのインストールについて](https://dev.mysql.com/doc/refman/5.7/en/upgrade-binary-package.html)
・[MySQL Yumリポジトリを使用したEnterprise LinuxプラットフォームまたはFedoraへのインストールについて](https://dev.mysql.com/doc/refman/5.7/en/updating-yum-repo.html)
・[MySQL APTリポジトリを使用したUbuntuへのインストールについて](https://dev.mysql.com/doc/refman/5.7/en/updating-apt-repo.html)
・[MySQL SLESリポジトリを使用したSLESへのインストールについて](https://dev.mysql.com/doc/refman/5.7/en/updating-sles-repo.html)
・[Dockerを使用して実行されるインストール](https://dev.mysql.com/doc/refman/5.7/en/upgrade-docker-mysql.html)
・[Windowsでのインストールについて](https://dev.mysql.com/doc/refman/5.7/en/windows-upgrading.html)

## 【余談】
**■そもそもyumって何？？**
>- yumは、Red Hat系のLinuxディストリビューションで使われている“RPMパッケージ”を扱うためのパッケージ管理コマンド。
- yumコマンドの書式：
```yum [オプション] コマンド [パッケージ名など]```
（例）yum install[update/erase] パッケージ名

[参考リンク](https://www.atmarkit.co.jp/ait/articles/1608/29/news019.html)

**■・・・dnfって何？？**
>DNFまたはDandified Yum (ダンディファイド ヤム)は、RPMベースのパッケージ管理システムを採用しているLinuxディストリビューション用のパッケージマネージャであるYum 3.4のフォークであり、Yumの事実上の後継バージョン