RedHat系LinuxにMySQL5.7をYumでインストール
yumコマンドを使用して、「MySQL5.7」をLinux(RedHat系のCentOS7、RockyLinux、AlmaLinuxなど)にインストールから初期設定、データベース作成、アクセスユーザーの作成、権限設定までの手順を記載。
インストール前の準備
CentOS7には、 mariaDBというMySQL互換のデータベースサーバーがデフォルトでインストールされている場合があるので、MySQLと競合を起こさないように以下のコマンドを実行して削除しておきます。インストールされていない場合は、この手順は無視する。
$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql/
コマンドはすべて管理者権限で行う必要があります。rootユーザーか一般ユーザーの場合は、sudoコマンドを使用します。また、su – などrootにスィッチしている場合は、sudoは不要です。
MySQLのyumリポジトリを追加
yumリポジトリパッケージを取得
CentOS7から標準リポジトリでMySQLが提供されなくなりました。代わりにMySQLと互換のある「MariaDB」が提供されるようになりました。yumのリポジトリのURLはMySQL更新サイトから入手することができます。
MySQL5.7については、「Red Hat Enterprise Linux 7/ Oracle Linux 7 (アーキテクチャに依存しない)、RPM パッケージ」に含まれています。CentOSやRockyLinux、AlimaLinux等、どのバージョンのパッケージのリポジトリを使用してよいかは、「uname -r」コマンドでLinuxカーネルバージョンを確認することでわかる。
例
[suna@localhost ~]$ uname -r
3.10.0-1160.80.1.el7.x86_64
[suna@localhost ~]$
上記例は、「3.10.0-1160.80.1.el7.x86_64」と表示されているのでカーネルバージョンは、先頭3桁の「3.10.0」となる、それを下記のLinuxバージョンに照らしわせると、「RHEL 7.1 ~ RHEL 7.9」となっているため、使用するリポジトリは、「Red Hat Enterprise Linux 7」となる。
対応していないカーネルバージョンを使用すると、インストール時にライブラリエラーを出力することがある。
カーネルバージョンに対応したリポジトリをダウンロード
バージョン | カーネルバージョン | パッケージ名 | |
---|---|---|---|
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時点のリンク先
#Red Hat Enterprise Linux 9
https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
#Red Hat Enterprise Linux 8
wget https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
#Red Hat Enterprise Linux 7
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
#Red Hat Enterprise Linux 6
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-el7-7.noarch.rpm
実行例
[suna@localhost ~]$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
読み込んだプラグイン:fastestmirror, langpacks
mysql80-community-release-el7-7.noarch.rpm | 11 kB 00:00:00
/var/tmp/yum-root-1R6qJ2/mysql80-community-release-el7-7.noarch.rpm を調べています: mysql80-community-release-el7-7.noarch
/var/tmp/yum-root-1R6qJ2/mysql80-community-release-el7-7.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mysql80-community-release.noarch 0:el7-7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
====================================================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
====================================================================================================================
インストール中:
mysql80-community-release noarch el7-7 /mysql80-community-release-el7-7.noarch 10 k
トランザクションの要約
====================================================================================================================
インストール 1 パッケージ
合計容量: 10 k
インストール容量: 10 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
インストール中 : mysql80-community-release-el7-7.noarch 1/1
検証中 : mysql80-community-release-el7-7.noarch 1/1
インストール:
mysql80-community-release.noarch 0:el7-7
完了しました!
[suna@localhost ~]$
MySQL5.7がインストール可能か「yum repolist」コマンドで確認します。
$ sudo yum repolist all | grep mysql
実行例
[suna@localhost ~]$ sudo yum repolist all | grep mysql
mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Comm 無効
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Comm 無効
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Comm 無効
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Comm 無効
mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Comm 無効
mysql-cluster-8.0-community-debuginfo/x86_64 MySQL Cluster 8.0 Comm 無効
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Comm 無効
mysql-connectors-community/x86_64 MySQL Connectors Commu 有効: 206
mysql-connectors-community-debuginfo/x86_64 MySQL Connectors Commu 無効
mysql-connectors-community-source MySQL Connectors Commu 無効
mysql-tools-community/x86_64 MySQL Tools Community 有効: 94
mysql-tools-community-debuginfo/x86_64 MySQL Tools Community 無効
mysql-tools-community-source MySQL Tools Community 無効
mysql-tools-preview/x86_64 MySQL Tools Preview 無効
mysql-tools-preview-source MySQL Tools Preview - 無効
mysql57-community/x86_64 MySQL 5.7 Community Se 無効
mysql57-community-source MySQL 5.7 Community Se 無効
mysql80-community/x86_64 MySQL 8.0 Community Se 有効: 367
mysql80-community-debuginfo/x86_64 MySQL 8.0 Community Se 無効
mysql80-community-source MySQL 8.0 Community Se 無効
[suna@localhost ~]$
現在の状態は、「mysql80-community」が有効となっており、「yum install mysql」コマンドを実行した場合、MySQL8.0が自動でインストールされます。
MySQL5.7をインストールする場合は、「yum-config-manager」コマンドを実行して、MySQL8.0→MySQL5.7にスィッチします。
$ sudo yum -y install yum-utils
$ sudo yum-config-manager --disable mysql80-community
$ sudo yum-config-manager --enable mysql57-community
実行例
[suna@localhost ~]$ sudo yum-config-manager --disable mysql80-community
読み込んだプラグイン:fastestmirror, langpacks
============================================= repo: mysql80-community ==============================================
[mysql80-community]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl = http://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64
cache = 0
cachedir = /var/cache/yum/x86_64/7/mysql80-community
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = 0
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7/mysql80-community/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7/mysql80-community/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022,
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
hdrdir = /var/cache/yum/x86_64/7/mysql80-community/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist =
mirrorlist_expire = 86400
name = MySQL 8.0 Community Server
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7/mysql80-community
pkgdir = /var/cache/yum/x86_64/7/mysql80-community/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert =
sslclientcert =
sslclientkey =
sslverify = True
throttle = 0
timeout = 30.0
ui_id = mysql80-community/x86_64
ui_repoid_vars = releasever,
basearch
username =
[suna@localhost ~]$ sudo yum-config-manager --enable mysql57-community
読み込んだプラグイン:fastestmirror, langpacks
============================================= repo: mysql57-community ==============================================
[mysql57-community]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl = http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64
cache = 0
cachedir = /var/cache/yum/x86_64/7/mysql57-community
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = 1
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7/mysql57-community/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7/mysql57-community/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022,
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
hdrdir = /var/cache/yum/x86_64/7/mysql57-community/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist =
mirrorlist_expire = 86400
name = MySQL 5.7 Community Server
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7/mysql57-community
pkgdir = /var/cache/yum/x86_64/7/mysql57-community/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert =
sslclientcert =
sslclientkey =
sslverify = True
throttle = 0
timeout = 30.0
ui_id = mysql57-community/x86_64
ui_repoid_vars = releasever,
basearch
username =
「/etc/yum.repos.d/mysql-community.repo」ファイルを書き換えることでも、インストールするパッケージを変更することができます。
MySQL5.7(❶)がenabled=1となっているため有効。MySQL8.0(❷)はenabled=0のため無効となっています。viエディタで直接修正することもできます。
次のコマンドで、正しいサブリポジトリが有効化及び無効化されていることを確認します。
$ sudo yum repolist enabled | grep mysql
[suna@localhost ~]$ sudo yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 206
mysql-tools-community/x86_64 MySQL Tools Community 94
mysql57-community/x86_64 MySQL 5.7 Community Server 624
[suna@localhost ~]$
もしも、MySQL5.7以外の表示されたら、以下の手順を試してみる
(EL8 システムのみ) RHEL8 や Oracle Linux 8 などの EL8 ベースのシステムには、デフォルトで有効になっている MySQL モジュールが含まれています。このモジュールが無効にされていない限り、MySQL リポジトリによって提供されるパッケージがマスクされます。
$ sudo yum module disable mysql
MySQL5.7のインストール
$ sudo yum install mysql-community-server
もしくは
$ sudo yum install mysql-server
正常にインストールされることを確認
MySQL5.7サーバーを起動する
$ sudo systemctl start mysqld
MySQL5.7サービスが起動されているか、起動状態を確認する。
$ sudo systemctl status mysqld
以下の状態であれば、正常に起動している。
[suna@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 月 2022-11-14 19:38:13 JST; 1min 4s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 11534 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 11462 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 11537 (mysqld)
Tasks: 27
CGroup: /system.slice/mysqld.service
└─11537 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
11月 14 19:38:09 localhost.localdomain systemd[1]: Starting MySQL Server...
11月 14 19:38:13 localhost.localdomain systemd[1]: Started MySQL Server.
[suna@localhost ~]$
サーバーの最初の起動時に、サーバーのデータディレクトリが空の場合、次のことが起きます。
- サーバーが初期化されます。
- SSL 証明書とキー ファイルはデータ ディレクトリに生成されます。
validate_password
インストールされ有効になっています。- スーパーユーザー アカウント
'root'@'localhost
が作成されます。スーパーユーザーのパスワードが設定され、エラー ログ ファイルに保存されます。
データベースファイルと設定ファイル(RPM系)
項目 | ファイルまたはディレクトリ |
---|---|
データベースディレクトリ | /var/lib/mysql/ |
設定ファイル | /etc/my.cnf ※最優先される設定ファイル |
MySQL5.7の初期設定
方法1:mysql_secure_installation使用しない
MySQLのrootパスワードを変更する
MySQL5.7のroot(スーパーユーザー)パスワードは、初期はmysqld.logに格納されています。
$ sudo grep 'temporary password' /var/log/mysqld.log
[suna@localhost ~]$ sudo grep 'temporary password' /var/log/mysqld.log
2022-11-14T10:38:10.697517Z 1 [Note] A temporary password is generated for root@localhost: Dpe*yyd5pV,V
[suna@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」コマンドを使用すると、MySQL5.7セキュリティを向上させることができます。
- rootアカウントのパスワードを設定
- rootを外部アクセスできないようにアカウントを削除します。(ローカルのみアクセス可)
- 匿名ユーザーアカウントを削除します。
- testデータベースを削除できます、
$ mysql_secure_installation
MySQL5.7サーバーの自動起動設定をする
以下のコマンドで自動起動設定をする
$ sudo systemctl enable mysqld
システムを再起動して自動起動するか確認をする
$ sudo reboot
$ sudo systemctl status mysqld
設定ファイルの変更
MySQL5.7のメインの設定ファイルの「/etc/my.ini」及び「/etc/my.cnf」を設定します。
[suna@localhost ~]$ cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/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 leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# 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
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[suna@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
変更例
[suna@localhost etc]$ sudo cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/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 leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# 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
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
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]
default-character-set = utf8mb4
[mysqladmin]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
mysqlサーバーを再起動する
$ sudo systemctl restart mysqld
my.cnfでサーバーが扱う文字コードを設定してから、データベース作成(create database)を行う。作成したデータベースに意図しない文字コードが設定されてしまったり、意図しない文字コードのデータがDBに登録されてしまうため。
データベース作成
mysqlコマンドラインクライアントでMySQLサーバーにログインします。
$ mysql -uroot -p
「show databases」コマンドで登録されているデータベースを表示します。
[suna@localhost etc]$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.7.40 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>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
データベース作成
CREATE DATABASE データベース名;
実行例
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
mysql>
一般ユーザーの作成
CREATE USER ユーザー名@localhost IDENTIFIED BY 'パスワード'; #サーバー内からのみアクセス可
CREATE USER ユーザー名@'%' IDENTIFIED BY 'パスワード'; #サーバー内及びネットワークからアクセス可
権限の設定
GRANT all ON *.* TO 'ユーザー名'@'localhost';
MySQL5.7のインストールは完了