AlmaLinux 9.6 セットアップメモ
Section 4.1 データベースサーバー構築編(MySQL)
About
MySQL のインストールと設定手順を残しています。
環境は、Section 2.1~Section 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-(略)
(以下略)
こうなってしまうので、同居させたい場合は構成を再検討しましょう。