MySQL Community Server 9.7 を AlmaLinux 9 にインストール
この手順は MySQL 公式 Yum リポジトリを使用します。MariaDB ではなく MySQL Community Server を導入する場合に利用してください。MySQL 9.7 は LTS (Long-Term Support) リリースです。採用前にサポート期間とアプリケーション互換性を確認してください。
既存パッケージとモジュールの確認
既存の MariaDB / MySQL サーバーがある場合は、データのバックアップと移行計画を先に作成してください。稼働中のデータベースを確認せずに削除しないでください。
# rpm -qa | grep -Ei '^(mariadb|mysql)'
# dnf module list mariadb
MariaDBモジュールが有効で、MySQL公式パッケージとの競合を避ける必要がある場合に無効化します。
# dnf module disable mariadb
これはMariaDBモジュールの無効化であり、インストール済みMariaDBサーバーやデータを削除する操作ではありません。
MySQL公式リポジトリの設定
MySQL Yum Repository公式ページでAlmaLinux 9 / EL9に対応する最新のリポジトリRPMを確認してダウンロードします。RPMのURLやリリース番号を古い記事から固定コピーせず、公式ページの現行案内を使用してください。ダウンロードしたファイルの名前は以降の例に合わせて置き換えます。
# dnf install ./mysql97-community-release-el9-RELEASE.noarch.rpm
# dnf repolist enabled | grep mysql
RELEASE は公式ダウンロードページで提供されるEL9用RPMのリリース番号に置き換えてください。導入後、MySQL 9.7のCommunity Serverリポジトリが有効であることを確認します。
DNFが署名鍵のインポートを求めた場合は、公式の手順と鍵のフィンガープリントを確認してから承認してください。
インストールと起動
# dnf install mysql-community-server
# systemctl enable --now mysqld
# systemctl status mysqld --no-pager
初期設定とroot接続
初回起動時に生成された一時パスワードをログから確認します。パスワードを文書・チケット・シェルコマンドに貼り付けず、端末上でのみ扱ってください。
# grep 'temporary password' /var/log/mysqld.log
プロンプトから入力して接続します。-p の後ろにパスワードを書かないでください。
# mysql -u root -p
接続後、対話的に初期設定を行い、匿名ユーザーと不要なテストDBを削除し、rootのリモートログインを禁止します。
# mysql_secure_installation
アプリケーション用DBユーザー
アプリケーションごとに専用ユーザーと専用データベースを作り、必要な操作だけを許可します。以下はローカル接続するアプリケーションの例です。名前とパスワードを環境に合わせて置き換えてください。
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'REPLACE_WITH_STRONG_SECRET';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost';
SHOW GRANTS FOR 'appuser'@'localhost';
アプリケーションがスキーマ変更も行う必要がある場合に限り、要件に応じたDDL権限を追加します。FILE 権限や *.* への広範な権限は通常のアプリケーションユーザーに付与しないでください。資格情報は設定ファイル等で保護し、ソース管理やシェル履歴に記録しないでください。
ファイアウォールとネットワーク公開
アプリケーションが同じホスト上で動作する場合、MySQLのポートをファイアウォールで開放する必要はありません。リモート接続が必要な場合のみ、MySQLの待受アドレス、TLS、MySQLアカウントの接続元ホストを適切に設定し、接続元を限定して開放します。
稼働中のゾーンを確認します。
# firewall-cmd --get-active-zones
例として、192.168.1.0/24 のアプリケーションネットワークからのみTCP/3306を許可するrich ruleです。送信元ネットワークとゾーンは実環境に置き換えてください。広く公開されるゾーンにmysqlサービスを無条件で追加しないでください。
# firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="mysql" accept' --permanent
# firewall-cmd --reload
# firewall-cmd --zone=internal --list-rich-rules
