AlmaLinux 10.1 セットアップメモ
Section 4.1 データベースサーバー構築編(MySQL)
About
MySQL のインストールと設定手順を残しています。
環境は、Section 1.1~Section 1.3で作成したvirtualboxの環境で実行しています。 そのため、SELinuxは有効な状態で作業を進めています。
起動後、rootアカウントになって作業を進めます。
パッケージの確認
リポジトリに登録されているものからパッケージ名とバージョンを指定してインストールすることになります。 まずは、提供されているかどうかを調べます。
[root@localhost ~]# dnf search mysql
============================================ Name & Summary Matched: mysql =============================================
akonadi-server-mysql.x86_64 : Akonadi MySQL backend support
apr-util-mysql.x86_64 : APR utility library MySQL DBD driver
dovecot-mysql.x86_64 : MySQL back end for dovecot
exim-mysql.x86_64 : MySQL lookup support for Exim
freeradius-mysql.x86_64 : MySQL support for freeradius
golang-github-sql-driver-mysql-devel.noarch : MySQL driver for Go's database/sql package
libnss-mysql.x86_64 : NSS library for MySQL
lighttpd-mod_vhostdb_mysql.x86_64 : Virtual host module for lighttpd that uses MySQL
mysql-mmm.noarch : Multi-Master Replication Manager for MySQL
mysql-selinux.noarch : SELinux policy modules for MySQL and MariaDB packages
mysql8.4.x86_64 : MySQL client programs and shared libraries
(略)
[root@localhost ~]# dnf repoquery mysql8.4
mysql8.4-0:8.4.6-2.el10_0.x86_64
mysql8.4-0:8.4.7-1.el10_1.x86_64
[root@localhost ~]#
MySQLは、バージョン付きで管理しているようなので、バージョンまで入れたパッケージ名で進めていきます。
インストール
対象バージョンが有効になったのでインストールしていきましょう。
[root@localhost ~]# dnf -y install mysql8.4 mysql8.4-server
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
mysql8.4 x86_64 8.4.7-1.el10_1 appstream 2.5 M
mysql8.4-server x86_64 8.4.7-1.el10_1 appstream 18 M
Installing dependencies:
checkpolicy x86_64 3.9-1.el10 appstream 366 k
libicu x86_64 74.2-5.el10_0 baseos 10 M
libtirpc x86_64 1.3.5-1.el10 baseos 94 k
mariadb-connector-c-config noarch 3.4.4-1.el10 baseos 8.9 k
mecab x86_64 0.996-9.el10 appstream 361 k
mysql-selinux noarch 1.0.14-1.el10_0 appstream 37 k
mysql8.4-common noarch 8.4.7-1.el10_1 appstream 69 k
mysql8.4-errmsg noarch 8.4.7-1.el10_1 appstream 521 k
policycoreutils-python-utils noarch 3.9-1.el10 appstream 45 k
protobuf-lite x86_64 3.19.6-11.el10 appstream 261 k
python3-audit x86_64 4.0.3-4.el10 appstream 69 k
python3-distro noarch 1.9.0-5.el10 appstream 51 k
python3-libsemanage x86_64 3.9-1.el10 appstream 81 k
python3-policycoreutils noarch 3.9-1.el10 appstream 2.1 M
python3-setools x86_64 4.5.1-5.el10 baseos 691 k
python3-setuptools noarch 69.0.3-12.el10_0 baseos 1.4 M
Transaction Summary
========================================================================================================================
Install 18 Packages
(中略)
Complete!
[root@localhost ~]#
インストールが終わりました。
データの保存場所について
Databaseに記録された情報がディスク内のどこに保存されるか?その場所は変更できるのか?という事に対する対応方法については、SELinuxが有効になっているため複雑なことになっているのでここでの解説はしません。
SELinux コンテキスト、ラベルを適切に設定したり、それの永続化など考えると長くなってしまうので……
サービス起動とセキュリティ設定
サービスを起動してから、MySQL の mysql_secure_installation を使って設定するのですが、初期状態で、anonymous ユーザは存在せず、rootユーザはリモートアクセスを許可しておらず、test となずけられたDatabaseも、ユーザもない。
例外的にパスワードにルール(複雑性などの)を設定するか?というものがありますが、開発用でこれを設定してしまうと簡易なパスワード設定ができなくなってしまうので設定しないとなると、実質、rootユーザのパスワード設定のみとなります。
なので、mysqlコマンドを使って実行します。
まずはサービスを起動します
[root@localhost ~]# systemctl start mysqld
rootアカウントのパスワードは定番通り ALTER USER を使って変更します。
[root@localhost ~]# mysql -u root --execute "ALTER USER 'root'@'localhost' IDENTIFIED BY 'vagrant';"
[root@localhost ~]#
これ以降は、-p オプションをつけて実行することになります。
サービスの有効化
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 10
Server version: 8.4.7 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 10 系では、MariaDBとMySQLのパッケージが競合する状態になっているため、どちらもインストールすることはできません。 おおよそ互換があるのでどちらかでいいと思いますが、どうしても同時に存在させたい場合はコンテナを使えというが回答となっています。
なお、本当に入らないのか確認したところ入りませんでした……
[root@localhost]# dnf install mariadb-server
Error:
Problem: problem with installed package mariadb-(略)
(以下略)
こうなってしまうので、同居させたい場合は構成を再検討しましょう。