公開日:2025/8/10 0:00:00

AlmaLinux 9.6 セットアップメモ

Section 4.1 データベースサーバー構築編(MySQL)

About

MySQL のインストールと設定手順を残しています。

環境は、Section 2.1Section 2.3で作成したvirtualboxの環境で実行しています。

AppStreamのバージョン等を調べる

モジュールの中から使うことができるバージョン情報から確認します。

[root@localhost ~]# dnf module list mysql
AlmaLinux 9 - AppStream
Name                  Stream                 Profiles                                        Summary
mysql                 8.4                    api, client, filter, server [d]                 MySQL Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]#

配信バージョンが確認出来たらどれを使うか決めてインストールします。

バージョンの切り替え

パッケージをインストールする前に、バージョンを指定して使うように設定します。

[root@localhost ~]# dnf -y module enable mysql:8.4
Dependencies resolved.
========================================================================================================================
 Package                     Architecture               Version                       Repository                   Size
========================================================================================================================
Enabling module streams:
 mysql                                                  8.4

Transaction Summary
========================================================================================================================

Complete!
[root@localhost ~]# dnf module list mysql
AlmaLinux 9 - AppStream
Name                  Stream                  Profiles                                       Summary
mysql                 8.4 [e]                 api, client, filter, server [d]                MySQL Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]#

これで、使用するバージョンに [e] が付いたので有効化されました。

インストール

対象バージョンが有効になったのでインストールしていきましょう。

[root@localhost ~]# dnf -y install mysql mysql-server
Dependencies resolved.
========================================================================================================================
 Package                             Architecture  Version                                       Repository        Size
========================================================================================================================
Installing:
 mysql                               x86_64        8.4.4-1.module_el9.6.0+152+8cbce00c           appstream        2.4 M
 mysql-server                        x86_64        8.4.4-1.module_el9.6.0+152+8cbce00c           appstream         18 M
Installing dependencies:
 checkpolicy                         x86_64        3.6-1.el9                                     appstream        351 k
 libicu                              x86_64        67.1-10.el9_6                                 baseos           9.6 M
 libtirpc                            x86_64        1.3.3-9.el9                                   baseos            93 k
 mariadb-connector-c-config          noarch        3.2.6-1.el9_0                                 appstream        9.7 k
 mecab                               x86_64        0.996-3.module_el9.6.0+152+8cbce00c.4         appstream        346 k
 mysql-common                        noarch        8.4.4-1.module_el9.6.0+152+8cbce00c           appstream         69 k
 mysql-errmsg                        noarch        8.4.4-1.module_el9.6.0+152+8cbce00c           appstream        518 k
 mysql-selinux                       noarch        1.0.13-1.el9_5                                appstream         36 k
 policycoreutils-python-utils        noarch        3.6-2.1.el9                                   appstream         71 k
 protobuf-lite                       x86_64        3.14.0-16.el9                                 appstream        232 k
 python3-audit                       x86_64        3.1.5-4.el9                                   appstream         83 k
 python3-distro                      noarch        1.5.0-7.el9                                   appstream         36 k
 python3-libsemanage                 x86_64        3.6-5.el9_6                                   appstream         78 k
 python3-policycoreutils             noarch        3.6-2.1.el9                                   appstream        2.0 M
 python3-setools                     x86_64        4.4.4-1.el9                                   baseos           551 k
 python3-setuptools                  noarch        53.0.0-13.el9_6.1                             baseos           837 k

Transaction Summary
========================================================================================================================
Install  18 Packages

(中略)

Complete!
[root@localhost ~]#

インストールが終わりました。

データの保存場所について

Databaseに記録された情報がディスク内のどこに保存されるか?その場所は変更できるのか?という事に対する対応方法については、SELinuxが有効になっているため複雑なことになっているのでここでの解説はしません。

SELinux コンテキスト、ラベルを適切に設定したり、それの永続化など考えると長くなってしまうので……

サービス起動とセキュリティ設定

サービスを起動してから、MySQL の mysql_secure_installation を使って設定します。

まずはサービスを起動します

[root@localhost ~]# systemctl start mysqld

次に、 mysql_secure_installation を使って設定します。 聞かれる項目は次の通り。

  • root ユーザのパスワードを変えるか?
    • Y を選択した場合、パスワード入力を行ってください
  • anonymous ユーザを削除するかどうか?
  • roorユーザはリモートからのDBアクセスを禁止してよいか?
  • test database や アクセス権限を削除してよいか?
  • 権限の再読み込みを実施してよいか?
[root@localhost ~]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:
Please set the password for root here.

New password:

Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!
[root@localhost ~]#

これで初期設定が完了しました。

サービスの有効化

systemd を通じてサービスの有効化を行います。これでサーバー起動時に勝手にサービスがスタートします。

[root@localhost ~]# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/syst//system/mysqld.service.
[root@localhost ~]# 

別のサーバーからアクセスさせる場合の設定

初期設定では、外部からのアクセスが完全に禁止されています。 そのため許可するように設定を変更してみましょう。

[root@localhost ~]# cp --preserve=context /etc/my.cnf.d/mysql-server.cnf /etc/my.cnf.d/mysql-server.cnf.org
[root@localhost ~]# cat /etc/my.cnf.d/mysql-server.cnf.org \
| sed -E "/^\[mysqld\]/a character-set-server = utf8mb4" \
| sed -E "/^pid-file=.*$/a bind_address = *" \
> /etc/my.cnf.d/mysql-server.cnf
[root@localhost ~]# diff -cT /etc/my.cnf.d/mysql-server.cnf.org /etc/my.cnf.d/mysql-server.cnf
*** /etc/my.cnf.d/mysql-server.cnf.org  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/my.cnf.d/mysql-server.cnf      YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 11,18 ****
--- 11,20 ----
        # instructions in http://fedoraproject.org/wiki/Syst/

        [mysqld]
+       character-set-server = utf8mb4
        datadir=/var/lib/mysql
        socket=/var/lib/mysql/mysql.sock
        log-error=/var/log/mysql/mysqld.log
        pid-file=/run/mysqld/mysqld.pid
+       bind_address = *

設定を変えたらサービスを再起動しましょう。

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# 

ロールとデータベースを作成する

データベースにアクセスするためのユーザーと権限(ロール)とデータベースを作成します。

vagrant ユーザーがいるのでそのユーザー用のロールとを作成します。 phpMyAdminなどを使って作成するほうがわかりやすいので、初めて作成する場合はそちらをお勧め。

とりあえず、phpMyAdminでユーザーを作成した時のSQLを実行します。

まずは、ユーザーの作成。 vagrant ユーザーを作成して、ローカルとそれ以外からのアクセスを許可するまでを一本で。 パスワード入力が求められますが、-p—password=mysqlのrootアカウントのパスワード にすることで、警告されますが聞かれずに入れることができます。

[root@localhost src]# mysql -u root -p --execute "\
CREATE USER 'vagrant'@'%' IDENTIFIED BY 'vagrant'; \
GRANT USAGE ON *.* TO 'vagrant'@'%'; \
ALTER USER 'vagrant'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;"
Enter password:
[root@localhost src]#

次にデータベースを作成しつつ、権限(ロール)設定。vagrant データベースと 頭に vagrant_ とついたデータベースにアクセスできるようにします。

[root@localhost src]# mysql -u root -p --execute "\
CREATE DATABASE IF NOT EXISTS vagrant; \
GRANT ALL PRIVILEGES ON vagrant.* TO 'vagrant'@'%'; \
GRANT ALL PRIVILEGES ON \`vagrant_%\`.* TO 'vagrant'@'%';"
Enter password:
[root@localhost src]#

接続確認

mariadbコマンドを使ってアクセスします。

[vagrant@localhost ~]$ mysql -u vagrant -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 87
Server version: 8.4.4 Source distribution

Copyright (c) 2000, 2025, 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> \q
Bye
[vagrant@localhost ~]$

注意事項

Redhat 9 系では、MariaDBとMySQLのパッケージが競合する状態になっているため、どちらもインストールすることはできません。 おおよそ互換があるのでどちらかでいいと思いますが、どうしても同時に存在させたい場合はコンテナを使えというが回答となっています。

なお、本当に入らないのか確認したところ入りませんでした……

[root@localhost]# dnf install mariadb-server
Error:
 Problem: problem with installed package mariadb-(略)
(以下略)

こうなってしまうので、同居させたい場合は構成を再検討しましょう。