MySQL

Table of Contents

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

参考

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です