公開日:2024/7/21 0:00:00

AlmaLinux 9.4 セットアップメモ

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

About

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

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

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

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

[root@localhost ~]# dnf module list mariadb
AlmaLinux 9 - AppStream
Name                    Stream                 Profiles                                   Summary
mariadb                 10.11                  client, galera, server [d]                 MariaDB Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

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

バージョンの切り替え

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

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

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

Complete!
[root@localhost ~]# dnf module list mariadb
AlmaLinux 9 - AppStream
Name                    Stream                   Profiles                                  Summary
mariadb                 10.11 [e]                client, galera, server [d]                MariaDB Module

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

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

インストール

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

[root@localhost ~]# dnf -y install mariadb mariadb-server
Dependencies resolved.
========================================================================================================================
 Package                             Architecture  Version                                       Repository        Size
========================================================================================================================
Installing:
 mariadb                             x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream        1.7 M
 mariadb-server                      x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream         10 M
Installing dependencies:
 checkpolicy                         x86_64        3.6-1.el9                                     appstream        351 k
 mariadb-common                      x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream         28 k
 mariadb-connector-c                 x86_64        3.2.6-1.el9_0                                 appstream        194 k
 mariadb-connector-c-config          noarch        3.2.6-1.el9_0                                 appstream        9.7 k
 mariadb-errmsg                      x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream        254 k
 mysql-selinux                       noarch        1.0.10-1.el9                                  appstream         36 k
 perl-DBD-MariaDB                    x86_64        1.21-16.el9_0                                 appstream        151 k
 perl-DBI                            x86_64        1.643-9.el9                                   appstream        700 k
 policycoreutils-python-utils        noarch        3.6-2.1.el9                                   appstream         71 k
 python3-audit                       x86_64        3.1.2-2.el9                                   appstream         82 k
 python3-distro                      noarch        1.5.0-7.el9                                   appstream         36 k
 python3-libsemanage                 x86_64        3.6-1.el9                                     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-12.el9                                 baseos           839 k
Installing weak dependencies:
 mariadb-backup                      x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream        6.7 M
 mariadb-gssapi-server               x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream         15 k
 mariadb-server-utils                x86_64        3:10.11.6-1.module_el9.4.0+98+2f9e4da4        appstream        261 k

Transaction Summary
========================================================================================================================
Install  20 Packages
(中略)
Installed:
  checkpolicy-3.6-1.el9.x86_64
  mariadb-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-backup-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-common-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-connector-c-3.2.6-1.el9_0.x86_64
  mariadb-connector-c-config-3.2.6-1.el9_0.noarch
  mariadb-errmsg-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-gssapi-server-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-server-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mariadb-server-utils-3:10.11.6-1.module_el9.4.0+98+2f9e4da4.x86_64
  mysql-selinux-1.0.10-1.el9.noarch
  perl-DBD-MariaDB-1.21-16.el9_0.x86_64
  perl-DBI-1.643-9.el9.x86_64
  policycoreutils-python-utils-3.6-2.1.el9.noarch
  python3-audit-3.1.2-2.el9.x86_64
  python3-distro-1.5.0-7.el9.noarch
  python3-libsemanage-3.6-1.el9.x86_64
  python3-policycoreutils-3.6-2.1.el9.noarch
  python3-setools-4.4.4-1.el9.x86_64
  python3-setuptools-53.0.0-12.el9.noarch
Complete!
[root@localhost ~]#

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

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

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

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

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

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

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

[root@localhost ~]# systemctl start mariadb

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

  • 現在の roor パスワード
    • 未設定なはずなので enter で良い
  • unix_socket authentication を使うか?
    • DBにアクセスするユーザ認証で、Linuxの認証が使えるようにするというもの
    • Y を選択した場合、Linuxユーザに存在するDBユーザを作ると認証スルー出来る
    • なので、root になっていれば、コンソールから簡単にアクセスできる
    • そういう設定
  • root ユーザのパスワードを変えるか?
    • Y を選択した場合、パスワード入力を行ってください
  • anonymous ユーザを削除するかどうか?
  • roorユーザはリモートからのDBアクセスを禁止してよいか?
  • test database や アクセス権限を削除してよいか?
  • 権限の再読み込みを実施してよいか?

最初の unix_socket authentication のところだけ、人によっては気を付ける必要がある場所ですね。 組織環境下で行う場合はルールがどうなっているかは確認が必要でしょう。 また、apacheがアクセスするDBユーザはapacheにするなんてルールの場合、サービス乗っ取られたらどうなるのか? などのリスク判断は必要になると思います。

[root@localhost ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] 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? [Y/n] Y
 ... Success!

By default, MariaDB 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? [Y/n] 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? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root@localhost ~]#

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

サービスの有効化

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

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

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

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

[root@localhost ~]# cp --preserve=context /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.org
[root@localhost ~]# cat /etc/my.cnf.d/mariadb-server.cnf.org \
| sed -E "/^pid-file=.*$/a skip-networking = 0\nbind-address = 0.0.0.0" \
> /etc/my.cnf.d/mariadb-server.cnf
[root@localhost ~]# diff -cT /etc/my.cnf.d/mariadb-server.cnf.org /etc/my.cnf.d/mariadb-server.cnf
*** /etc/my.cnf.d/mariadb-server.cnf.org  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/my.cnf.d/mariadb-server.cnf      YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 18,23 ****
--- 18,25 ----
        socket=/var/lib/mysql/mysql.sock
        log-error=/var/log/mariadb/mariadb.log
        pid-file=/run/mariadb/mariadb.pid
+       skip-networking = 0
+       bind-address = 0.0.0.0


        #

MariaDBのマニュアル(Configuring MariaDB for Remote Client Access)を参考にしてください。 なお、bind-address=0.0.0.0 の代わりに skip-bind-address も使えます。

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

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

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

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

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

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

まずは、ユーザーの作成。 vagrant ユーザーを作成して、ローカルとそれ以外からのアクセスを許可するまでを一本で。

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

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

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

接続確認

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

[vagrant@localhost ~]$ mariadb -u vagrant -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.11.6-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> Bye
[vagrant@localhost ~]$

注意事項

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

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

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

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