CentOS7にMySQL8.0をインストール

CentOS７にMySQLをインストールする方法。

>操作はrootかsudoでの実行を想定。

## 準備

まず、CentOS7からはMySQLではなく、互換サーバのMariaDB押しになっているので、その関連ファイルを削除します。

### MariaDB関連ライブラリの確認と削除

まあ、存在を確認しなくてもそのまま消せばよいか、念の為。

```
rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64

yum remove mariadb-libs
rm -rf /var/lib/mysql/
```

## インストール

続けてインストール。

### リポジトリのインストール

標準のリポジトリには含まれないのでMySQLのリポジトリを追加する。
なお、リポジトリのURLは更新されるので、[ここ](https://dev.mysql.com/downloads/repo/yum/)らで確認する。

ダウンロードページの

![スクリーンショット 2019-02-17 10.43.02.png](https://qiita-image-store.s3.amazonaws.com/0/55188/783a1159-cded-4268-7077-4c1d218dfa86.png)

No Thanks, ~のリンク先をコピーするとよい。
rpmコマンドを利用してリポジトリをインストールする（なお、yum localinstallコマンドも利用できるはずだが、上手くインストールされなかっった）。

```bash
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
```

>yum localinstallを利用するとrpmを直接インストールできる。rpmはCentOSのベースとなるRedHat Linux系で利用され,yumの登場以前によく利用されていたPackageManagerのこと。

### リポジトリの確認

インストールされたリポジトリと有効・無効の状態を確認してみます。
リポジトリをインストールすると、8.0含め、複数のバージョンのインストールに対応したリポジトリが設定されます。

```bash
yum repolist all | grep mysql

mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community      無効
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - So 無効
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community      無効
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - So 無効
mysql-connectors-community/x86_64  MySQL Connectors Community       有効:     95
mysql-connectors-community-source  MySQL Connectors Community - Sou 無効
mysql-tools-community/x86_64       MySQL Tools Community            有効:     84
mysql-tools-community-source       MySQL Tools Community - Source   無効
mysql-tools-preview/x86_64         MySQL Tools Preview              無効
mysql-tools-preview-source         MySQL Tools Preview - Source     無効
mysql55-community/x86_64           MySQL 5.5 Community Server       無効
mysql55-community-source           MySQL 5.5 Community Server - Sou 無効
mysql56-community/x86_64           MySQL 5.6 Community Server       無効
mysql56-community-source           MySQL 5.6 Community Server - Sou 無効
mysql57-community/x86_64           MySQL 5.7 Community Server       無効
mysql57-community-source           MySQL 5.7 Community Server - Sou 無効
mysql80-community/x86_64           MySQL 8.0 Community Server       有効:     82
mysql80-community-source           MySQL 8.0 Community Server - Sou 無効
```

```bash
mysql80-community/x86_64           MySQL 8.0 Community Server 
```

とあるので、標準では8.0がインストールされる（なお、設定により5.5,5.6,５．７もインストールできることが見て取れる）。

>5.7とかが利用したければ/etc/yum.repo.d内のファイルを編集するなどして対応する。


### インストール

ではインストールします。

```bash
yum install mysql-community-server
```

これでインストール自体は終了。

## 設定

### 起動

まずは起動してみます。

```bash
systemctl start mysqld.service
```


### 永続化

続いて永続化。

```bash
systemctl enable mysqld.service
```

### パスワードの確認

インストール時にrootのパスワードがlogに吐かれているのでgrepして確認します。

```bash
grep password /var/log/mysqld.log
2019-02-17T01:49:46.433912Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: V9djjjWFd_wf
```

パスワードをメモしておきます。ここでは"V9djjjWFd_wf"の箇所。

### mysql_secure_installationの実行

パスワードの更新を兼ねてmysql_secure_installationコマンドを実行しておきます。
いろいろ聞かれますが、ガイダンスを読みながら落ち着いて対応します。

```bash
mysql_secure_installation
```

### ログインと状態確認

では、変更したパスワードでログインしてみます。

```bash
mysql -u root -p
```

statusコマンドで状況を確認しておきます。

```
mysql>status


--------------
mysql  Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:		13
Current database:
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		8.0.15 MySQL Community Server - GPL
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8mb4
Db     characterset:	utf8mb4
Client characterset:	utf8mb4
Conn.  characterset:	utf8mb4
UNIX socket:		/var/lib/mysql/mysql.sock
Uptime:			4 min 46 sec

Threads: 2  Questions: 17  Slow queries: 0  Opens: 124  Flush tables: 2  Open tables: 100  Queries per second avg: 0.059
--------------
```

標準の文字コードが(utf8から）utf8mb4になっています。

## その他

### 認証方式の変更

標準の認証方式がcaching_sha2_passwordというものに変更されており、開発言語側のMySQLドライバからアクセスできない場合があります。その場合は認証方式を従来のmysql_native_passwordに変更します。

#### 既に登録済みのユーザー

root等、既存の登録済みユーザーはalterで行います。
まずは、現状の確認。

```bash
mysql>select user, plugin from mysql.user;
```

変更。

```bash
mysql>alter user 'root'@'localhost' identified with mysql_native_password by 'P@ssw0rd!!';
```

#### 恒久的変更

my.cnfいじります。

```:/etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
```

>変更反映には再起動が必要です。