【RockyLinux8】みんな大好き MySQL8.0のインストール【Community Clientのみ】

# MySQL8.0のクライアントのみインストール

MySQLのCLIを使って、クラウド上のMySQLインスタンスにアクセスしたいけど、
MySQLを何も考えずにインストールすると、MySQLサーバもインストールされちゃいます。
Clientのみインストールする方法をメモ。

インストール方法について、Qiita記事がいろいろHITしますが、
結局[公式](https://dev.mysql.com/doc/refman/8.0/ja/linux-installation-yum-repo.html)に全部載っているので、
これを参考にします。

最初公式手順見ずに適当にやってたらいくつかハマった点があったので、
ハマったところリストとして最後に紹介しています。

## yumリポジトリを登録する

community-clientのみインストールする場合は、MySQL公式のリポジトリを */etc/yum.repos.d/* に登録して、
そこからcommunity-clientを指定してyum(dnf)インストールします。

まず、/etc/yum.repos.d/にrepoを登録します。

`vi`などのエディタで直接作成するか、
`yum(dnf)-comfig-manager`コマンドで自動で作成する方法もあります。

`yum(dnf)-config-manager`で作成するとファイル名とか書式が汚くなるので、
今回はviで自作します。

baseURLは[ここ](http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/)を参照します。

```
# cd /etc/yum.repos.d/
# vi mysql-community.repo
```

```repo:mysql-community.repo
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
```

- 確認

`# dnf repolist enabled | grep mysql`を実行して、出てきたらOK。

```
# dnf repolist enabled | grep mysql
mysql80-community       MySQL 8.0 Community Server
```

## GPG鍵をインストール

さて、↑のリポジトリ登録で、gpgcheckやgpgkeyというものが出てきました。
GPG鍵は、このリポジトリに含まれているパッケージの信ぴょう性や完全性を証明するための暗号鍵です。

- [参照](https://dev.mysql.com/doc/refman/8.0/ja/checking-gpg-signature.html)

デフォルトではインストールされていないようなので、これを取得します。
参照のページを見ると、[こちら](http://pgp.mit.edu/)で公開されているようです。

1. `Search String`の欄に`mysql`と入力して`Do the search!`ボタンを押します。
2. 一番上に`pub  4096R/3A79BD29 2021-12-14 MySQL Release Engineering <mysql-build@oss.oracle.com>`が出てくると思うので、リンクになっている`3A79BD29`をクリックします。
3. pub-keyが表示されるので、`BEGIN PGP ~ END PGP`までをコピーして、`/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql`にペーストします。
4. 以上で取得完了！

## moduleを無効化する

どうやらRHEL8をはじめとするRedHat系のディストリビューションでは、
yum→dnfを利用することになったことで、新たな概念として`module`というものが実装されているようです。

このmoduleですが、RHEL8系だとデフォルトで提供されているmysqlモジュールが存在していて、
このmoduleのせいでさっきインストールしてきたMySQLのリポジトリが参照されないようになってしまいます。

せっかく手動でDLしてきたMySQLのリポジトリを表示するには、`# dnf module disable`を実行します。

```
# dnf module disable mysql

メタデータの期限切れの最終確認: 0:22:12 時間前の 2022年05月25日 21時31分14秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                    アーキテクチャー                             バージョン                                     リポジトリー                                  サイズ
===============================================================================================================================================================================================
モジュールストリームの有効化中:
 mysql                                                                                      8.0                                                                                               

トランザクションの概要
===============================================================================================================================================================================================

これでよろしいですか? [y/N]: y
完了しました!
```

## インストール

問題なければこれでインストールできます！

```
# dnf install mysql-community-client
メタデータの期限切れの最終確認: 0:04:32 時間前の 2022年05月25日 22時14分13秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                   バージョン                                  リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql-community-client                                     x86_64                             8.0.29-1.el8                                mysql80-community                              14 M
依存関係のインストール:
 mysql-community-client-plugins                             x86_64                             8.0.29-1.el8                                mysql80-community                             2.4 M
 mysql-community-common                                     x86_64                             8.0.29-1.el8                                mysql80-community                             636 k
 mysql-community-libs                                       x86_64                             8.0.29-1.el8                                mysql80-community                             1.5 M

トランザクションの概要
===============================================================================================================================================================================================
インストール  4 パッケージ

ダウンロードサイズの合計: 19 M
インストール後のサイズ: 102 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/4): mysql-community-client-8.0.29-1.el8.x86_64.rpm                                                                                                           86 MB/s |  14 MB     00:00    
(2/4): mysql-community-libs-8.0.29-1.el8.x86_64.rpm                                                                                                             71 MB/s | 1.5 MB     00:00    
(3/4): mysql-community-common-8.0.29-1.el8.x86_64.rpm                                                                                                          1.2 MB/s | 636 kB     00:00    
(4/4): mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm                                                                                                  3.7 MB/s | 2.4 MB     00:00    
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                            29 MB/s |  19 MB     00:00     
MySQL 8.0 Community Server                                                                                                                                     3.1 MB/s | 3.1 kB     00:00    
GPG 鍵 0x3A79BD29 をインポート中:
 Userid     : "MySQL Release Engineering <mysql-build@oss.oracle.com>"
 Fingerprint: 859B E8D7 C586 F538 430B 19C2 467B 942D 3A79 BD29
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                                       1/1 
  インストール中   : mysql-community-client-plugins-8.0.29-1.el8.x86_64                                                                                                                    1/4 
  インストール中   : mysql-community-common-8.0.29-1.el8.x86_64                                                                                                                            2/4 
  インストール中   : mysql-community-libs-8.0.29-1.el8.x86_64                                                                                                                              3/4 
  scriptletの実行中: mysql-community-libs-8.0.29-1.el8.x86_64                                                                                                                              3/4 
  インストール中   : mysql-community-client-8.0.29-1.el8.x86_64                                                                                                                            4/4 
  scriptletの実行中: mysql-community-client-8.0.29-1.el8.x86_64                                                                                                                            4/4 
  検証             : mysql-community-client-8.0.29-1.el8.x86_64                                                                                                                            1/4 
  検証             : mysql-community-client-plugins-8.0.29-1.el8.x86_64                                                                                                                    2/4 
  検証             : mysql-community-common-8.0.29-1.el8.x86_64                                                                                                                            3/4 
  検証             : mysql-community-libs-8.0.29-1.el8.x86_64                                                                                                                              4/4 

インストール済み:
  mysql-community-client-8.0.29-1.el8.x86_64    mysql-community-client-plugins-8.0.29-1.el8.x86_64    mysql-community-common-8.0.29-1.el8.x86_64    mysql-community-libs-8.0.29-1.el8.x86_64   

完了しました!
```

- 確認

```
# mysql --version
mysql  Ver 8.0.29 for Linux on x86_64 (MySQL Community Server - GPL)
↑mysqlコマンドが使えることが確認できた。

# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
↑サーバはインストールしてないので、サーバとしては使えない。
```

# ハマったところリスト

- GPG鍵が登録されていない
- GPG鍵が間違っている
- moduleを無効化していない
- 中途半端なインストールしてたせいで中途半端にキャッシュが残ってバグる

moduleに関しては初見だっだので、目からうろこでした。

## エラー例1 : GPG鍵が登録されていない

鍵がインストールされてない状態で`dnf install mysql-community-client`しようとしても、GPG鍵エラーがでてインストールできません。

```
# dnf install mysql-community-client
メタデータの期限切れの最終確認: 0:15:45 時間前の 2022年05月25日 21時31分14秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                   バージョン                                  リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql-community-client                                     x86_64                             8.0.29-1.el8                                mysql80-community                              14 M
依存関係のインストール:
 mysql-community-client-plugins                             x86_64                             8.0.29-1.el8                                mysql80-community                             2.4 M
 mysql-community-common                                     x86_64                             8.0.29-1.el8                                mysql80-community                             636 k
 mysql-community-libs                                       x86_64                             8.0.29-1.el8                                mysql80-community                             1.5 M

トランザクションの概要
===============================================================================================================================================================================================
インストール  4 パッケージ

ダウンロードサイズの合計: 19 M
インストール後のサイズ: 102 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/4): mysql-community-common-8.0.29-1.el8.x86_64.rpm                                                                                                          1.2 MB/s | 636 kB     00:00    
(2/4): mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm                                                                                                  3.7 MB/s | 2.4 MB     00:00    
(3/4): mysql-community-libs-8.0.29-1.el8.x86_64.rpm                                                                                                            5.9 MB/s | 1.5 MB     00:00    
(4/4): mysql-community-client-8.0.29-1.el8.x86_64.rpm                                                                                                           14 MB/s |  14 MB     00:01    
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                            18 MB/s |  19 MB     00:01     
mysql-community-client-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません
mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません
mysql-community-common-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません
mysql-community-libs-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません
ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: GPG の確認に失敗しました
```

yum.repos.d/mysql-community.repo で指定したように、`/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql`をダウンロードしてくる必要があります。

## エラー例2 : GPG鍵が間違ってい

[公式のGPG署名マニュアル](https://dev.mysql.com/doc/refman/8.0/ja/checking-gpg-signature.html)に載っている鍵を`RPM-GPG-KEY-mysql`に登録したところ、
鍵が間違っているといわれてエラーになりました。

```

```# dnf install mysql-community-client
メタデータの期限切れの最終確認: 0:01:31 時間前の 2022年05月25日 22時14分13秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                   バージョン                                  リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql-community-client                                     x86_64                             8.0.29-1.el8                                mysql80-community                              14 M
依存関係のインストール:
 mysql-community-client-plugins                             x86_64                             8.0.29-1.el8                                mysql80-community                             2.4 M
 mysql-community-common                                     x86_64                             8.0.29-1.el8                                mysql80-community                             636 k
 mysql-community-libs                                       x86_64                             8.0.29-1.el8                                mysql80-community                             1.5 M

トランザクションの概要
===============================================================================================================================================================================================
インストール  4 パッケージ

ダウンロードサイズの合計: 19 M
インストール後のサイズ: 102 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/4): mysql-community-common-8.0.29-1.el8.x86_64.rpm                                                                                                          826 kB/s | 636 kB     00:00    
(2/4): mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm                                                                                                  2.5 MB/s | 2.4 MB     00:00    
(3/4): mysql-community-libs-8.0.29-1.el8.x86_64.rpm                                                                                                            3.8 MB/s | 1.5 MB     00:00    
(4/4): mysql-community-client-8.0.29-1.el8.x86_64.rpm                                                                                                          9.6 MB/s |  14 MB     00:01    
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                            13 MB/s |  19 MB     00:01     
MySQL 8.0 Community Server                                                                                                                                      27 MB/s |  27 kB     00:00    
GPG 鍵 0x5072E1F5 をインポート中:
 Userid     : "MySQL Release Engineering <mysql-build@oss.oracle.com>"
 Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?
mysql-community-client-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません. 失敗したパッケージは: mysql-community-client-8.0.29-1.el8.x86_64
 GPG 鍵が設定されています: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません. 失敗したパッケージは: mysql-community-client-plugins-8.0.29-1.el8.x86_64
 GPG 鍵が設定されています: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
mysql-community-common-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません. 失敗したパッケージは: mysql-community-common-8.0.29-1.el8.x86_64
 GPG 鍵が設定されています: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
mysql-community-libs-8.0.29-1.el8.x86_64.rpm の公開鍵がインストールされていません. 失敗したパッケージは: mysql-community-libs-8.0.29-1.el8.x86_64
 GPG 鍵が設定されています: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: GPG の確認に失敗しました
```

おそらく、公式ページに古い鍵が表示されているようです。
手順で紹介した通り、`http://pgp.mit.edu/`からDLした鍵を使いましょう。

↓こちらの方法でも鍵をimportできるようです
- [参考](https://blog.proglus.jp/5095/)

## エラー例3 : moduleが無効化されておらず、mysql-community-clientが見つからない

今回検証したRockyLinux8には、AppStreamというデフォルトで入っているリポジトリにMySQLが入ってるので、
`# dnf install -y mysql`でインストールは可能ですが、`mysql-community-client`単体をインストールすることはできません。

これは、RHEL8系のディストリビューションで実装されている`module`によるものです。

```
# dnf install mysql-community-client
メタデータの期限切れの最終確認: 0:02:06 時間前の 2022年05月25日 20時55分06秒 に実施しました。
一致した引数がありません: mysql-community-client
エラー: 一致するものが見つかりません: mysql-community-client
```

手動で持ってきたMySQLリポジトリを利用する場合は、このmoduleを無効化します。

```
# dnf module disable mysql
```

- [参考にした記事](https://cpoint-lab.co.jp/article/202011/17808/)

## エラー例4 : 中途半端なインストールしてたせいで中途半端にキャッシュが残ってバグる

今回記事作成のためにわざとdnf install でエラー起こしたりしてたら、
キャッシュが中途半端に残ってしまい、 パッケージがAlready downloaded とかでてバグりました。

ログに解決方法`# dnf clean packages`を実行してくれとあるので実行したら治りました。

```
# dnf install mysql-community-client
メタデータの期限切れの最終確認: 0:04:19 時間前の 2022年05月25日 22時14分13秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                   バージョン                                  リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql-community-client                                     x86_64                             8.0.29-1.el8                                mysql80-community                              14 M
依存関係のインストール:
 mysql-community-client-plugins                             x86_64                             8.0.29-1.el8                                mysql80-community                             2.4 M
 mysql-community-common                                     x86_64                             8.0.29-1.el8                                mysql80-community                             636 k
 mysql-community-libs                                       x86_64                             8.0.29-1.el8                                mysql80-community                             1.5 M

トランザクションの概要
===============================================================================================================================================================================================
インストール  4 パッケージ

合計サイズ: 19 M
インストール後のサイズ: 102 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
[SKIPPED] mysql-community-client-8.0.29-1.el8.x86_64.rpm: Already downloaded                                                                                                                  
[SKIPPED] mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm: Already downloaded                                                                                                          
[SKIPPED] mysql-community-common-8.0.29-1.el8.x86_64.rpm: Already downloaded                                                                                                                  
[SKIPPED] mysql-community-libs-8.0.29-1.el8.x86_64.rpm: Already downloaded                                                                                                                    

ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: パッケージのダウンロード中にエラーが発生しました:
  mysql-community-client-8.0.29-1.el8.x86_64: Already downloaded
  mysql-community-client-plugins-8.0.29-1.el8.x86_64: Already downloaded
  mysql-community-common-8.0.29-1.el8.x86_64: Already downloaded
  mysql-community-libs-8.0.29-1.el8.x86_64: Already downloaded
```

- なおす

```
[root@imade-gcp01 rpm-gpg]# dnf clean packages 
4 ファイルが削除されました
```

以上です！

# 感想

重い腰を上げてMySQL5.7からMySQL8.0を使い始めることになりましたが、
インストールで所々躓いたのでメモしておきました。

特に、インストールするOSのディストリビューションによってはmoduleの無効化などが必要となってくる点が注意が必要ですね。

エラーメッセージでこの記事に飛んできた方は、参考にしてみてください。