RedHat系のLinuxにMySQL8.0をYumでインストール
yumコマンドを使用して、「MySQL8.0」をLinux(RedHat系のCentOS7、RockyLinux、AlmaLinuxなど)にインストールから初期設定、データベース作成、アクセスユーザーの作成、権限設定までの手順を記載。
インストール準備
MySQL Yumリポジトリをシステムのリポジトリリストに追加します。この操作は一度だけ必要です。
Rocky、AlimaLinux、CentOSへは、「Red Hat Enterprise Linux ○」のRPM PackageをダウンロードしてMySQL用のパッケージをインストールします。
MySQL8.0については、「Red Hat Enterprise Linux 7/ Oracle Linux 7 (アーキテクチャに依存しない)、RPM パッケージ」に含まれています。CentOSやRockyLinux、AlimaLinux等、どのバージョンのパッケージのリポジトリを使用してよいかは、「uname -r」コマンドでLinuxカーネルバージョンを確認することでわかる。
uname -r
[rin@localhost ~]$ uname -r
4.18.0-372.32.1.el8_6.x86_64
[rin@localhost ~]$
上記例は、「4.18.0-372.32.1.el8_6.x86_64」と表示されているのでカーネルバージョンは、先頭3桁の「4.18.0」となる、それを下記のLinuxバージョンに照らしわせると、「RHEL 8.0 ~ RHEL 8.6」となっているため、使用するリポジトリは、「Red Hat Enterprise Linux 8」となる。
対応していないカーネルバージョンを使用すると、インストール時にライブラリエラーを出力することがある。
バージョン | カーネルバージョン | パッケージ名 | |
---|---|---|---|
Red Hat Enterprise Linux 2.1 | RHEL 2.1 Update1~7 | 2.4.9 | – |
Red Hat Enterprise Linux 3 | RHEL 3 Update1~8 or RHEL 3.9 | 2.4.21 | – |
Red Hat Enterprise Linux 4 | RHEL 4 Update 1~4 or RHEL 4.5~RHEL 4.9 | 2.6.9 | – |
Red Hat Enterprise Linux 5 | RHEL 5.1 ~ RHEL 5.11 | 2.6.18 | – |
Red Hat Enterprise Linux 6 | RHEL 6.1 ~ RHEL 6.10 | 2.6.32 | Red Hat Enterprise Linux 6 / Oracle Linux 6 (Architecture Independent), RPM Package |
Red Hat Enterprise Linux 7 | RHEL 7.1 ~ RHEL 7.9 | 3.10.0 | Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package |
Red Hat Enterprise Linux 8 | RHEL 8.0 ~ RHEL 8.6 | 4.18 | Red Hat Enterprise Linux 8 / Oracle Linux 8 (Architecture Independent), RPM Package |
Red Hat Enterprise Linux 9 | RHEL 9.0 | 5.14 | Red Hat Enterprise Linux 9 / Oracle Linux 9 (Architecture Independent), RPM Package |
2022/11/16時点のリンク先
wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
wget https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
wget https://dev.mysql.com/get/mysql80-community-release-el6-7.noarch.rpm
※ここでwgetでダウンロードは不要
yumリポジトリ追加
yumリポジトリをダウンロードしてインストールします。
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
実行例
[rin@localhost ~]$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
メタデータの期限切れの最終確認: 1:49:59 時間前の 2022年11月17日 07時57分42秒 に実施しました。
mysql80-community-release-el8-4.noarch.rpm 37 kB/s | 14 kB 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
完了しました!
[rin@localhost ~]$
MySQL8.0がインストール可能か「yum repolist」コマンドで確認します。
$ sudo yum repolist all | grep mysql
実行例
[rin@localhost ~]$ sudo yum repolist all | grep mysql
mysql-cluster-8.0-community MySQL Cluster 8.0 Community 無効化
mysql-cluster-8.0-community-debuginfo MySQL Cluster 8.0 Community - Debug 無効化
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - Sourc 無効化
mysql-connectors-community MySQL Connectors Community 有効化
mysql-connectors-community-debuginfo MySQL Connectors Community - Debugi 無効化
mysql-connectors-community-source MySQL Connectors Community - Source 無効化
mysql-tools-community MySQL Tools Community 有効化
mysql-tools-community-debuginfo MySQL Tools Community - Debuginfo 無効化
mysql-tools-community-source MySQL Tools Community - Source 無効化
mysql-tools-preview MySQL Tools Preview 無効化
mysql-tools-preview-source MySQL Tools Preview - Source 無効化
mysql80-community MySQL 8.0 Community Server 有効化
mysql80-community-debuginfo MySQL 8.0 Community Server - Debugi 無効化
mysql80-community-source MySQL 8.0 Community Server - Source 無効化
[rin@localhost ~]$
現在の状態は、「mysql80-community」が有効となっているので、「yum install mysql」コマンドを実行した場合、MySQL8.0が自動でインストールされます。
MySQL8.0が有効になっていない場合
もし、MySQL8.0が無効となっており別のMySQLが有効になっている場合は、「yum-config-manager」を使用してMySQL8.0を有効にしMySQL8.0以外を無効にします。
$ sudo yum -y install yum-utils
$ sudo yum-config-manager --disable mysql57-community
$ sudo yum-config-manager --enable mysql80-community
「/etc/yum.repos.d/mysql-community.repo」ファイルを書き換えることでも、インストールするパッケージを変更することができます。
MySQL5.7(❶)がenabled=1となっているため有効。MySQL8.0(❷)はenabled=0のため無効となっています。viエディタで直接修正することもできます。
次のコマンドで、正しいサブリポジトリが有効化及び無効化されていることを確認します。
$ sudo yum repolist enabled | grep mysql
[rin@localhost ~]$ sudo yum repolist enabled | grep mysql
mysql-connectors-community MySQL Connectors Community
mysql-tools-community MySQL Tools Community
mysql80-community MySQL 8.0 Community Server
[rin@localhost ~]$
もしも、MySQL8.0以外の表示されたら、以下の手順を試してみる
(EL8 システムのみ) RHEL8 や Oracle Linux 8 などの EL8 ベースのシステムには、デフォルトで有効になっている MySQL モジュールが含まれています。このモジュールが無効にされていない限り、MySQL リポジトリによって提供されるパッケージがマスクされます。
$ sudo yum module disable mysql
MySQL8.0のインストール
$ sudo yum install mysql-community-server
もしくは
$ sudo yum install mysql-server
正常にインストールされることを確認
MySQL8.0サーバーを起動する
$ sudo systemctl start mysqld
MySQLサービスが起動されているか、起動状態を確認する。
$ sudo systemctl status mysqld
以下の状態であれば、正常に起動している。
[rin@localhost ~]$ sudo systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-11-17 10:05:44 JST; 7s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 13063 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 13141 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 10822)
Memory: 485.1M
CGroup: /system.slice/mysqld.service
└─13141 /usr/sbin/mysqld
11月 17 10:05:37 localhost.localdomain systemd[1]: Starting MySQL Server...
11月 17 10:05:44 localhost.localdomain systemd[1]: Started MySQL Server.
[rin@localhost ~]$
サーバーの最初の起動時に、サーバーのデータディレクトリが空の場合、次のことが起きます。
- サーバーが初期化されます。
- SSL 証明書とキー ファイルはデータ ディレクトリに生成されます。
validate_password
インストールされ有効になっています。- スーパーユーザー アカウント
'root'@'localhost
が作成されます。スーパーユーザーのパスワードが設定され、エラー ログ ファイルに保存されます。
データベースファイルと設定ファイル(RPM系)
項目 | ファイルまたはディレクトリ |
---|---|
データベースディレクトリ | /var/lib/mysql/ |
設定ファイル | /etc/my.cnf ※最優先される設定ファイル |
MySQL8.0の初期設定
方法1:mysql_secure_installation使用しない
MySQLのrootパスワードを変更する
MySQLのroot(スーパーユーザー)パスワードは、初期はmysqld.logに格納されています。
$ sudo grep 'temporary password' /var/log/mysqld.log
[rin@localhost ~]$ sudo grep 'temporary password' /var/log/mysqld.log
2022-11-17T01:05:40.726912Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: j4N*&/;sNtd9
[rin@localhost ~]$
以下のコマンドでrootのパスワードを変更する
$> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
validate_password がデフォルトでインストールされており、以下のルールでパスワードを設定する必要があります。
- パスワード長:8文字以上
- 大文字小文字:それぞれ1文字以上
- 数字:1文字以上
- 記号:1文字以上
方法2:mysql_secure_installation使用する
「mysql_secure_installation」コマンドを使用すると、MySQLセキュリティを向上させることができます。
- rootアカウントのパスワードを設定
- rootを外部アクセスできないようにアカウントを削除します。(ローカルのみアクセス可)
- 匿名ユーザーアカウントを削除します。
- testデータベースを削除できます、
$ mysql_secure_installation
MySQL8.0Serverの自動起動設定をする
以下のコマンドで自動起動設定をする
$ sudo systemctl enable mysqld
システムを再起動して自動起動するか確認をする
$ sudo reboot
$ sudo systemctl status mysqld
設定ファイルの変更
「MySQL8.0」のメインの設定ファイルの「/etc/my.ini」及び「/etc/my.cnf」を設定します。
初期ファイル
[rin@localhost ~]$ 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
[rin@localhost ~]$
初期時の設定例
my.cnfの設定は、データベースサイズやサーバースペック、データベース運用で問題が起き始めた場合に修正していく設定になります。下記のほかにもたくさんありますが、例えば「max_connections」パラメータでデータベース接続数に上限を設けることでデータベースパフォーマンスの安定化を図ったり、データベースが肥大化したことによるバッファ領域のサイズを調整する「innodb_buffer_pool_size」パラメータを調整したりします。また、I/Oパフォーマンスに関する「innodb_log_file_size」パラメータなどもあります。
オプショナルグループ | システム変数 | 値 | 意味 |
---|---|---|---|
mysqld (サーバー) | character-set-server | utf8mb4 | UTF-8エンコーディング。1文字が1~4バイトの可変長。※絵文字などにも対応しています。 |
default-storage-engine | InnoDB | データベースエンジンを指定。通常はInnDB | |
max_allowed_packet | 256M | デフォルト4MB パケットの最大許可サイズ数。小さい値を設定していると長いSQL文の発行などでエラーになることがある | |
transaction-isolation | READ-COMMITTED | ||
max_connections | システム運用時はあまり設定しない方が無難。システム運用時にコネクション上限に達し全システム停止するケースがあった。 | ||
default_password_lifetime | 0 | パスワード自動有効期限が無効 |
すべてのオプショナルグループの文字コードは明示的にあわせておきます。クライアントやサーバーで扱う文字コードが異なる場合は、文字化けの要因になります。
重要なパラメータ設定(パフォーマンスに影響をあたる)は、たとえデフォルトであってもmy.cnfに記述しておくことをお勧めします。これは、my.cnfを見た時にMySQLサーバーがどのような挙動をするか認識しやすくするためです。サーバー運用時は、無効にする場合や変更する場合はコメント化と変更履歴を残すことも大事です。障害や意図しない挙動したときの原因特定にも寄与するからです。
my.cnfを編集
$ sudo vi /etc/my.cnf
変更例
[rin@localhost ~]$ 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
character-set-server=utf8mb4
default-storage-engine=InnoDB
max_allowed_packet=256M
transaction-isolation=READ-COMMITTED
[mysql]
default-character-set = utf8mb4
[mysqlcheck]
mysqlサーバーを再起動する
$ sudo systemctl restart mysqld
my.cnfでサーバーが扱う文字コードを設定してから、データベース作成(create database)を行う。作成したデータベースに意図しない文字コードが設定されてしまったり、意図しない文字コードのデータがDBに登録されてしまうため。
データベース作成
mysqlコマンドラインクライアントでMySQLサーバーにログインします。
$ mysql -uroot -p
「show databases」コマンドで登録されているデータベースを表示します。
[rin@localhost ~]$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
データベース作成
CREATE DATABASE データベース名;
実行例
mysql> create database mysql80db;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| mysql80db |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
一般ユーザーの作成
CREATE USER ユーザー名@localhost IDENTIFIED BY 'パスワード'; #サーバー内からのみアクセス可
CREATE USER ユーザー名@'%' IDENTIFIED BY 'パスワード'; #サーバー内及びネットワークからアクセス可
実行例
mysql> CREATE USER testuser@'%' IDENTIFIED BY 'Sssss@5632';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER testuser@localhost IDENTIFIED BY 'Sssss@5632';
Query OK, 0 rows affected (0.01 sec)
mysql>
権限の設定
GRANT all ON *.* TO 'ユーザー名'@'localhost';
実行例
mysql> GRANT all ON *.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql>
MySQL8.0のインストールは完了