EC2(AmazonLinux2)にmysql8をインストールする

## はじめに

以下の実装を目標にする。

`・AmazonLinux２にmysql8をインストール`

※インフラAWS化を目指している初学者
使用PC:Mac


## mysqlパッケージに関する注意点

`EC2`の`AMI`で`AmazonLinux２を選択した場合`
`CentOS７系がベースとなっているため`
`mysql8で選択すべきパッケージ`は
**`mysql80-community-release-el7-3.noarch.rpm`（2021/8/18時点）**となる。

MySQL公式ページから自分がインストールする時に適切なパッケージを確認する。

https://dev.mysql.com/downloads/repo/yum/


## 手順

１、MySQL公式ページから対象パッケージをダウンロード
２、ローカルにダウンロードしたファイルを、リモート(AWS ES2)にscpコマンドでコピー
３、ファイルからMySQLをインストールする

恐らく、遠回りな実装例だが個人的にイメージがつきやすかったのでこの方法で進める。
（mysql公式ページのURLを読み取ってインストールした方が早道）
　**`→　圧倒的にURL読み取りの方が楽なので、4.にまとめた`**


## １、対象パッケージをダウンロード

下記の公式ページからパッケージをダウンロードする。
（今回はEC２のAMIに`AmazonLinux２`を選択しているため`７系`を選択する。）

https://dev.mysql.com/downloads/repo/yum/

![スクリーンショット 2021-08-19 15.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/d07cbc4b-f51a-2ca5-7d31-f7b7a2c3f521.png)

すると自分のローカル（MacならFinder内）にダウンロードされるので
ちゃんと出来ているか確認しておく。



## ２、ローカルからリモートへコピー

下記コマンドで`リモートのホームディレクトリ配下に`ファイルを置いておく。
（`Macユーザーのため.sshディレクトリにEC２の秘密鍵を入れている。`）

```shell:ターミナル

# scp ＜秘密鍵の認証＞ ＜コピー元ファイル＞ ＜コピー先＞
% scp -i ~/.ssh/秘密鍵名.pem ~/Downloads/mysql80-community-release-el7-3.noarch.rpm ec2-user@リモートIPアドレス:~/ 

```



## ３、mysqlインストール

まずは、EC2にログインします。

```shell:ターミナル

# ssh接続でEC2にログイン
% ssh -i ~/.ssh/秘密鍵名.pem ec2-user@リモートIPアドレス

### SSH情報を登録する場合
% vi ~/.ssh/config

##### EC2アクセス というコメント
Host ホスト名
  HostName IPアドレス
  User ec2-user
  IdentityFile ~/.ssh/秘密鍵

### コマンドを省略してEC2にログイン
% ssh ホスト名

```

あとは公式ページのコマンドに従って入力していく。

https://dev.mysql.com/doc/refman/8.0/ja/linux-installation-yum-repo.html


```shell:EC2
# デフォルトでインストール済みのMariaDBパッケージ一式を削除する
% sudo yum remove mariadb*

# yumのリポジトリにセット
% sudo yum install mysql80-community-release-el7-3.noarch.rpm

# セットできたかを確認
% yum repolist enabled | grep "mysql.*-community.*"

# mysqlをインストール
% sudo yum install mysql-community-server

# mysqlを起動
% sudo service mysqld start

# 起動確認
% sudo systemctl status mysqld.service

```



## 4.(楽)MySQLのURLを参照してyumにインストールさせる

わざわざファイルをダウンロードするのは手間なので
直接URLからインストールする方法をまとめる。(2021/01/04時点)

```shell:EC2

% sudo yum remove mariadb*

% sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm

% sudo yum install --enablerepo=mysql80-community mysql-community-server

% sudo yum install --enablerepo=mysql80-community mysql-community-devel

% sudo service mysqld start

% sudo systemctl status mysqld.service

```



## 自分がハマった部分

冒頭で説明している
`EC2のAMI(AmazonLinux2)とMySQLバージョン相性`を
しっかり理解しないまま、実装すると以下のドツボにハマった。

・AMIがAmazonLinux２なのにmysql8.0(８系)をダウンロード/インストールしてしまう
・間違いだと気づき、ダウンロードファイルとyumにセットされたパッケージを削除
・正しいmysql8.0(７系)シリーズをダウンロードする
・再びインストールするも依存関係のエラーが発生
・しばらく解決策の情報収集して、色々試すも解決せず
・ふとエラー文を見ると、なぜかmysqlをインストールするコマンド入力時に
　mysql8.0(８系)に変換されてしまっていることが発覚。
・ただし、どこに過去のファイルが残っていて影響しているのか特定できず
　（ネットで同じ状況の人を探すもヒットしない…）

```:エラー（イメージ）

% sudo yum install mysql-community-server

~　結果　~

インストール中     : mysql-community-client-plugins-8.0.26-1.el8.x86_64
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　↑el7じゃない…

```  

ここから解決策が上手く探し出せずに、泣く泣く下記方法で解決した。

・EC２を削除して一から立て直しする

意外と同じ状態にハマる人もいるかもしれないので、記録に残す。




## 番外：mysqlシリーズを変更する

インストール前に
MySQL8.0ではなく、5.7や5.6に変更したい場合は
現状どのシリーズが有効になっているかを確認


```:ec2_ターミナル

% yum repolist all | grep mysql

```


デフォルトではシリーズはMySQL8.0が有効となっているので
8.0を無効に、対象シリーズを有効に変更する。

```:ec2_ターミナル

% sudo yum-config-manager --disable mysql80-community

% sudo yum-config-manager --enable mysql57-community

```

同様にmysqlをインストールする。

```:ec2_ターミナル

% sudo yum install mysql-community-server

```



## 終わりに

AWSのビジネスサポートに月100$で加入できるらしいので
どのタイミングで加入しようか検討中。

いま、加入したら序盤も序盤すぎて
質問の仕方も曖昧になってしまって、無駄遣いになりそう。

まずは、基本のrailsアプリをEC2上に
デプロイする所までは自力で頑張ろう。