MySQL 8.0インストール

# はじめに
RPM パッケージを使用した Oracle Linux 8 への MySQL 8.0.32 インストール手順を紹介します。

本記事は、MySQL8.0の下記マニュアルを参考に作成しました。
**[2.5 Linux に MySQL をインストールする](https://dev.mysql.com/doc/refman/8.0/ja/linux-installation.html)**

筆者の環境は、OCIの[Always Freeサービス](https://www.oracle.com/jp/cloud/free/)を使用しています。
コンピュートインスタンスのスペックは下記です。

| # | 値 |
|-:|-:|
| シェイプ | VM.Standard.E2.1.Micro |
| OCPU数  | 1  |
| NW帯域幅(Gbps)  | 0.48  |
| メモリ(GB)  | 1  |
| ストレージ(GB)  | 47 |

メモリ1GBと心許ない環境ですが、今のところ支障なく使用できています。

# MySQL Yum リポジトリの追加
MySQL Developer Zone の[Download MySQL Yum Repository](https://dev.mysql.com/downloads/repo/yum/) にアクセスし、使用しているプラットフォーム用のRPMパッケージをダウンロードします。

Oracle Linux 8の場合は下記をダウンロードします。
* Red Hat Enterprise Linux 8 / Oracle Linux 8 (Architecture Independent)
(mysql80-community-release-el8-4.noarch.rpm)

MySQL Yum リポジトリをシステムのリポジトリリストに追加します。 
```
[opc@mdb01 ~]$ sudo yum install mysql80-community-release-el8-4.noarch.rpm
Ksplice for Oracle Linux 8 (x86_64)                                                                                                                             10 MB/s | 2.1 MB     00:00
MySQL 8.0 for Oracle Linux 8 (x86_64)                                                                                                                           12 MB/s | 2.8 MB     00:00
MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64)                                                                                                          3.3 MB/s | 426 kB     00:00
MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64)                                                                                                     245 kB/s |  28 kB     00:00
Oracle Software for OCI users on Oracle Linux 8 (x86_64)                                                                                                        31 MB/s |  74 MB     00:02
Oracle Linux 8 BaseOS Latest (x86_64)                                                                                                                           26 MB/s |  57 MB     00:02
Oracle Linux 8 Application Stream (x86_64)                                                                                                                      25 MB/s |  43 MB     00:01
Oracle Linux 8 Addons (x86_64)                                                                                                                                  17 MB/s | 6.9 MB     00:00
Latest Unbreakable Enterprise Kernel Release 7 for Oracle Linux 8 (x86_64)                                                                                      22 MB/s |  14 MB     00:00
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                        バージョン                             リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql80-community-release                                  noarch                                  el8-4                                  @commandline                                   14 k

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

合計サイズ: 14 k
インストール後のサイズ: 8.6 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                                       1/1
  インストール中   : mysql80-community-release-el8-4.noarch                                                                                                                                1/1
  検証             : mysql80-community-release-el8-4.noarch                                                                                                                                1/1

インストール済み:
  mysql80-community-release-el8-4.noarch

完了しました!

```
MySQL Yum リポジトリが正常に追加されたことを確認します。
```
[opc@mdb01 ~]$ yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community       MySQL Connectors Community
mysql-tools-community            MySQL Tools Community
mysql80-community                MySQL 8.0 Community Server
```
デフォルトで有効になっている MySQL モジュール無効にします。
```
[opc@mdb01 ~]$ sudo dnf module disable mysql
メタデータの期限切れの最終確認: 3:02:40 時間前の 2023年04月9日 11時38分27秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                    アーキテクチャー                             バージョン                                     リポジトリー                                  サイズ
===============================================================================================================================================================================================
モジュールの無効化:
 mysql

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

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

MySQL をインストールします。
```
[opc@mdb01 ~]$ sudo yum install mysql-community-server
メタデータの期限切れの最終確認: 3:04:36 時間前の 2023年04月9日 11時38分27秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================================================================================
 パッケージ                                                 アーキテクチャー                   バージョン                                  リポジトリー                                  サイズ
===============================================================================================================================================================================================
インストール:
 mysql-community-server                                     x86_64                             8.0.32-1.el8                                mysql80-community                              64 M
依存関係のインストール:
 mysql-community-client                                     x86_64                             8.0.32-1.el8                                mysql80-community                              16 M
 mysql-community-client-plugins                             x86_64                             8.0.32-1.el8                                mysql80-community                             2.5 M
 mysql-community-common                                     x86_64                             8.0.32-1.el8                                mysql80-community                             656 k
 mysql-community-icu-data-files                             x86_64                             8.0.32-1.el8                                mysql80-community                             2.1 M
 mysql-community-libs                                       x86_64                             8.0.32-1.el8                                mysql80-community                             1.5 M

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

ダウンロードサイズの合計: 87 M
インストール後のサイズ: 410 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/6): mysql-community-common-8.0.32-1.el8.x86_64.rpm                                                                                                           19 MB/s | 656 kB     00:00
(2/6): mysql-community-client-plugins-8.0.32-1.el8.x86_64.rpm                                                                                                   22 MB/s | 2.5 MB     00:00
(3/6): mysql-community-icu-data-files-8.0.32-1.el8.x86_64.rpm                                                                                                   13 MB/s | 2.1 MB     00:00
(4/6): mysql-community-libs-8.0.32-1.el8.x86_64.rpm                                                                                                             12 MB/s | 1.5 MB     00:00
(5/6): mysql-community-client-8.0.32-1.el8.x86_64.rpm                                                                                                           19 MB/s |  16 MB     00:00
(6/6): mysql-community-server-8.0.32-1.el8.x86_64.rpm                                                                                                           26 MB/s |  64 MB     00:02
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                            33 MB/s |  87 MB     00:02
MySQL 8.0 Community Server                                                                                                                                     3.0 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-2022
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
MySQL 8.0 Community Server                                                                                                                                     1.9 MB/s | 1.9 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
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                                       1/1
  インストール中   : mysql-community-common-8.0.32-1.el8.x86_64                                                                                                                            1/6
  インストール中   : mysql-community-client-plugins-8.0.32-1.el8.x86_64                                                                                                                    2/6
  インストール中   : mysql-community-libs-8.0.32-1.el8.x86_64                                                                                                                              3/6
  scriptletの実行中: mysql-community-libs-8.0.32-1.el8.x86_64                                                                                                                              3/6
  インストール中   : mysql-community-client-8.0.32-1.el8.x86_64                                                                                                                            4/6
  インストール中   : mysql-community-icu-data-files-8.0.32-1.el8.x86_64                                                                                                                    5/6
  scriptletの実行中: mysql-community-server-8.0.32-1.el8.x86_64                                                                                                                            6/6
  インストール中   : mysql-community-server-8.0.32-1.el8.x86_64                                                                                                                            6/6
  scriptletの実行中: mysql-community-server-8.0.32-1.el8.x86_64                                                                                                                            6/6
  検証             : mysql-community-client-8.0.32-1.el8.x86_64                                                                                                                            1/6
  検証             : mysql-community-client-plugins-8.0.32-1.el8.x86_64                                                                                                                    2/6
  検証             : mysql-community-common-8.0.32-1.el8.x86_64                                                                                                                            3/6
  検証             : mysql-community-icu-data-files-8.0.32-1.el8.x86_64                                                                                                                    4/6
  検証             : mysql-community-libs-8.0.32-1.el8.x86_64                                                                                                                              5/6
  検証             : mysql-community-server-8.0.32-1.el8.x86_64                                                                                                                            6/6

インストール済み:
  mysql-community-client-8.0.32-1.el8.x86_64 mysql-community-client-plugins-8.0.32-1.el8.x86_64 mysql-community-common-8.0.32-1.el8.x86_64 mysql-community-icu-data-files-8.0.32-1.el8.x86_64
  mysql-community-libs-8.0.32-1.el8.x86_64   mysql-community-server-8.0.32-1.el8.x86_64

完了しました!
```

# MySQL Server の起動
systemctlコマンドを使用して、MySQLサーバを起動します。
```
[opc@mdb01 ~]$ sudo systemctl start mysqld
```

状態を確認します。
```
[opc@mdb01 ~]$ sudo systemctl status mysqld

● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-04-09 15:01:41 JST; 36s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 693087 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 693263 (mysqld)
   Status: "Server is operational"
    Tasks: 39 (limit: 5565)
   Memory: 459.7M
   CGroup: /system.slice/mysqld.service
           mq693263 /usr/sbin/mysqld

 4月 9 15:01:13 mdb01 systemd[1]: Starting MySQL Server...
 4月 9 15:01:41 mdb01 systemd[1]: Started MySQL Server.
```

何らかのエラーが発生し、起動に失敗した場合は、MySQLサーバのログファイル、あるいはsystemctl status mysqldコマンドで原因を調査します。
```
[root@mdb01 ~]# cat /var/log/mysqld.log
```

MySQLサーバの初回起動時に下記の初期化処理が行われます。
* サーバーが初期化されます。
* SSL 証明書およびキーファイルがデータディレクトリに生成されます。
* validate_password がインストールされ、有効になっています。
* スーパーユーザーアカウントroot@localhost が作成されます。

MySQLの管理者であるrootアカウントの初期パスワードは、ログファイル( /var/log/mysqld.log )に出力されています。下記のようにtemporary passwordをキーワードにして確認可能です。
```
[root@mdb01 ~]# grep 'temporary password' /var/log/mysqld.log
2023-04-09T06:01:29.672108Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <初期パスワード>
```

mysqlクライアントを起動し、初期パスワードを使用してログインします。
```
[root@mdb01 ~]# mysql -uroot -p
Enter password: <初期パスワードを入力>
```
ALTER USER文を使用して、初期パスワードを変更します。
```
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '変更後のパスワード';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
```
前述の通り、validate_passwordが有効化されていますため、下記のパスワードポリシに従う必要があります。

:::note info
* パスワードに大文字、小文字、数字および特殊文字を 1 文字以上含める
* パスワードの合計長は 8 文字以上
:::

PRMパッケージを使用してインストールした場合のデータベースファイルは、/var/lib/mysql に格納されます。初回起動後のデータベースファイルディレクトリの状態は下記となります。
```
[root@mdb01 ~]# ls -l /var/lib/mysql
total 90568
-rw-r-----. 1 mysql mysql       56 Apr 9 15:01  auto.cnf
-rw-r-----. 1 mysql mysql      157 Apr 9 15:01  binlog.000001
-rw-r-----. 1 mysql mysql       16 Apr 9 15:01  binlog.index
-rw-------. 1 mysql mysql     1676 Apr 9 15:01  ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 Apr 9 15:01  ca.pem
-rw-r--r--. 1 mysql mysql     1112 Apr 9 15:01  client-cert.pem
-rw-------. 1 mysql mysql     1676 Apr 9 15:01  client-key.pem
-rw-r-----. 1 mysql mysql   196608 Apr 9 15:03 '#ib_16384_0.dblwr'
-rw-r-----. 1 mysql mysql  8585216 Apr 9 15:01 '#ib_16384_1.dblwr'
-rw-r-----. 1 mysql mysql     5554 Apr 9 15:01  ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Apr 9 15:01  ibdata1
-rw-r-----. 1 mysql mysql 12582912 Apr 9 15:01  ibtmp1
drwxr-x---. 2 mysql mysql     4096 Apr 9 15:01 '#innodb_redo'
drwxr-x---. 2 mysql mysql      187 Apr 9 15:01 '#innodb_temp'
drwxr-x---. 2 mysql mysql      143 Apr 9 15:01  mysql
-rw-r-----. 1 mysql mysql 25165824 Apr 9 15:01  mysql.ibd
srwxrwxrwx. 1 mysql mysql        0 Apr 9 15:01  mysql.sock
-rw-------. 1 mysql mysql        7 Apr 9 15:01  mysql.sock.lock
drwxr-x---. 2 mysql mysql     8192 Apr 9 15:01  performance_schema
-rw-------. 1 mysql mysql     1676 Apr 9 15:01  private_key.pem
-rw-r--r--. 1 mysql mysql      452 Apr 9 15:01  public_key.pem
-rw-r--r--. 1 mysql mysql     1112 Apr 9 15:01  server-cert.pem
-rw-------. 1 mysql mysql     1676 Apr 9 15:01  server-key.pem
drwxr-x---. 2 mysql mysql       28 Apr 9 15:01  sys
-rw-r-----. 1 mysql mysql 16777216 Apr 9 15:03  undo_001
-rw-r-----. 1 mysql mysql 16777216 Apr 9 15:03  undo_002
```

また、上記ディレクトリの場所は、設定ファイル(/etc/my.cnf)のdata_dir変数に定義されています。
```
[opc@mdb01 ~]$ cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```
# MySQL Server の停止
mysqladminコマンドを使用して、MySQLサーバを停止します。
```
[root@mdb01 ~]# mysqladmin -u root -p shutdown
Enter password:
```

MySQL Server が停止した事を確認します。
```
[root@mdb01 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Wed 2023-04-09 15:43:17 JST; 19min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 693263 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 693087 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 693263 (code=exited, status=0/SUCCESS)
   Status: "Server shutdown complete"

Apr 9 15:01:13 mdb01 systemd[1]: Starting MySQL Server...
Apr 9 15:01:41 mdb01 systemd[1]: Started MySQL Server.
Apr 9 15:43:17 mdb01 systemd[1]: mysqld.service: Succeeded.
```

当環境のようにsystemdを使用している場合は、systemctlコマンドにて停止可能です。
```
[root@mdb01 ~]# systemctl stop mysqld
```