はじめに
前回の記事では、EC2インスタンスにApacheをインストールしてWebサーバーを構築しました。今回は、Webアプリケーションに欠かせないデータベース「MySQL」をインストールして設定する方法を解説します。
「データベースって何?」「MySQLって何をするもの?」といった疑問から、インストール手順、初期設定まで、初心者の方にもわかりやすく説明していきます。
そもそもデータベースとMySQLとは?
データベースとは
データベースとは、データを効率的に保存・検索・管理するためのシステムです。日常生活の例で考えると:
- ファイリングキャビネット:書類を整理して保管する
- 図書館の蔵書管理システム:本の情報を管理し、簡単に検索できるようにする
データベースがなければ、例えばWordPressの記事や会員情報を単なるテキストファイルとして保存することになり、検索や更新が非常に非効率になります。
MySQLとは
MySQLはデータベース管理システム(DBMS)の一種です。「データベース」が概念なのに対し、「MySQL」は具体的な製品名です。
これは「乗り物」と「トヨタのカローラ」の関係に似ています:
- 「乗り物」は概念・カテゴリ(データベース)
- 「トヨタのカローラ」は具体的な製品(MySQL)
他のデータベース製品としては、PostgreSQL、Oracle Database、Microsoft SQL Serverなどがあります。
データベースとSSD/HDDの違い
ごくまれに「ハードウェアの代わりになるもの」と勘違いしている人がいますが
データベースはSSDやHDDの「代わり」ではなく、それらの物理ストレージの「上に構築される」より高度なデータ管理システムです。
わかりやすく説明すると:
- 物理ストレージ(SSD/HDD):データを物理的に保存する場所、「倉庫の建物」のようなもの
- ファイルシステム:ファイルを整理する基本的な仕組み、「倉庫内の棚や通路」のようなもの
- データベース:データを効率的に保存・検索・管理するためのシステム、「倉庫管理システム」のようなもの
MySQLはこの「倉庫管理システム」にあたり、データの整理、検索、複数人での同時利用などを効率的に行えるようにします。
MySQLをEC2にインストールする手順
ではEC2インスタンスにMySQLをインストールする手順を、各ステップの意味も含めて詳しく説明していきます。
1. MySQLの公式リポジトリを追加する準備
まず、AWSのEC2にSSHで接続した状態から始めます。
1-1. GPG鍵のインポート
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
このコマンドで何が起きているのか:
-
sudo
: 管理者権限でコマンドを実行 -
rpm --import
: RPMパッケージシステムに署名用の鍵を追加 -
https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
: MySQLの公式GPG鍵のURL
なぜこれが必要なのか:
これはセキュリティ対策です。インターネットからダウンロードするソフトウェアが本物であり、改ざんされていないことを確認するための電子署名の鍵をシステムに登録しています。偽物のソフトウェアがインストールされるリスクを減らします。
1-2. MySQLリポジトリパッケージのダウンロード
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
このコマンドで何が起きているのか:
-
wget
: インターネットからファイルをダウンロードするコマンド - URL: MySQLの公式サイトからリポジトリ情報を含むRPMパッケージをダウンロード
なぜこれが必要なのか:
このファイルには、MySQLの最新バージョンをダウンロードするためのリポジトリ(ソフトウェアの保管場所)情報が含まれています。AmazonのEC2にはデフォルトでMySQLのリポジトリが含まれていないため、追加する必要があります。
1-3. ダウンロードの確認
ls -la
このコマンドで何が起きているのか:
-
ls
: ディレクトリ内のファイル一覧を表示 -
-la
: 隠しファイルも含めて詳細情報を表示
何を確認するのか:
ダウンロードしたファイル mysql80-community-release-el7-5.noarch.rpm
が存在することを確認します。このファイルが表示されれば、ダウンロードは成功です。
2. MySQLリポジトリの追加
sudo yum localinstall -y mysql80-community-release-el7-5.noarch.rpm
このコマンドで何が起きているのか:
-
sudo yum localinstall
: ローカルにあるRPMパッケージをyumを使ってインストール -
-y
: すべての確認に自動で「yes」と答える -
mysql80-community-release-el7-5.noarch.rpm
: インストールするパッケージファイル
なぜこれが必要なのか:
このコマンドにより、MySQLの公式リポジトリがシステムに追加されます。その結果、yum
コマンドでMySQLの各種パッケージをインストールできるようになります。
コマンドが成功すると「Complete!」と表示されます。
3. MySQLサーバーのインストール
sudo yum install -y mysql-community-server
このコマンドで何が起きているのか:
-
sudo yum install
: 指定したパッケージをインストール -
-y
: すべての確認に自動で「yes」と答える -
mysql-community-server
: MySQLサーバーのパッケージ名
なぜこれが必要なのか:
これがMySQLデータベースサーバー本体のインストールコマンドです。データベースサーバーとその動作に必要なすべての依存関係がインストールされます。
このインストールにはしばらく時間がかかることがあります。完了すると「Complete!」と表示されます。
4. MySQLのバージョン確認
mysql --version
このコマンドで何が起きているのか:
MySQLクライアントのバージョンを表示します。
なぜこれが必要なのか:
このコマンドで、MySQLが正しくインストールされていることと、そのバージョンを確認できます。
出力例: mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
5. MySQLサーバーの起動
sudo systemctl start mysqld
このコマンドで何が起きているのか:
-
sudo systemctl start
: 指定したサービスを起動 -
mysqld
: MySQLデーモン(サーバープロセス)
なぜこれが必要なのか:
インストールしただけでは、MySQLサーバーは自動的に起動しません。このコマンドで明示的にMySQLサーバーを起動します。
6. MySQLサーバーの状態確認
systemctl status mysqld
このコマンドで何が起きているのか:
MySQLサーバーが正常に動作しているかを確認します。
何を確認するのか:
出力に active (running)
と表示されていれば、サーバーは正常に動作しています。
出力例:
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2025-04-06 04:30:12 UTC; 5s ago
7. 初期パスワードの確認
sudo grep 'temporary password' /var/log/mysqld.log
このコマンドで何が起きているのか:
-
sudo grep
: 管理者権限でファイル内を検索 -
'temporary password'
: 検索するテキスト -
/var/log/mysqld.log
: 検索対象のログファイル
なぜこれが必要なのか:
MySQLの初回インストール時、rootユーザーには自動生成された一時パスワードが設定されます。このパスワードはログファイルに記録されており、これを使って初めてMySQLに接続します。
出力例: 2025-04-06T04:30:12.234567Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: abcD1efgHij2k
ここで表示されるパスワード(例では abcD1efgHij2k
)をメモしておきます。
8. MySQLへの接続
mysql -u root -p
このコマンドで何が起きているのか:
-
mysql
: MySQLクライアントを起動 -
-u root
: rootユーザーとしてログイン -
-p
: パスワードを使用してログイン
パスワードを求められたら、先ほどメモした一時パスワードを入力します。
なぜこれが必要なのか:
このコマンドでMySQLサーバーに接続します。接続に成功すると、MySQLのコマンドプロンプト(mysql>
)が表示されます。
9. MySQLのセキュリティ設定
mysql_secure_installation
このコマンドで何が起きているのか:
MySQLのセキュリティを強化するための対話式セットアップツールが起動します。
なぜこれが必要なのか:
初期状態のMySQLには、セキュリティ上の弱点がいくつかあります。このコマンドでそれらを改善し、より安全な設定にします。
このセットアップでは以下の操作を行います:
- rootパスワードの変更
- 匿名ユーザーの削除
- rootのリモートログイン禁止
- テストデータベースの削除
- 権限テーブルの再読み込み
画面の指示に従って設定を進めます。通常はすべての質問に「Y」(Yes)と答えるのが安全です。
10. MySQLサーバーの自動起動設定
sudo systemctl enable mysqld
このコマンドで何が起きているのか:
-
sudo systemctl enable
: システム起動時に自動的に起動するよう設定 -
mysqld
: MySQLデーモン(サーバープロセス)
なぜこれが必要なのか:
このコマンドにより、EC2インスタンスを再起動してもMySQLサーバーが自動的に起動するようになります。
11. 自動起動設定の確認
systemctl is-enabled mysqld
このコマンドで何が起きているのか:
MySQLサーバーが自動起動に設定されているかを確認します。
何を確認するのか:
出力が enabled
であれば、自動起動が正しく設定されています。
MySQLの基本的な使い方
MySQLのインストールと初期設定が完了したら、基本的な使い方を試してみましょう。
データベースの作成
MySQLに接続した状態で以下のコマンドを実行します:
CREATE DATABASE testdb;
データベースの一覧表示
SHOW DATABASES;
MySQLからの切断
EXIT;
トラブルシューティング
Q: mysql --version
コマンドで「command not found」と表示される
A: MySQLクライアントがインストールされていない可能性があります。以下のコマンドでインストールしてください:
sudo yum install -y mysql-community-client
Q: MySQLサーバーが起動しない
A: 以下のコマンドでエラーログを確認します:
sudo tail -f /var/log/mysqld.log
Q: 一時パスワードが見つからない
A: ログファイル全体を確認してみましょう:
sudo cat /var/log/mysqld.log | grep password
まとめ
この記事では、EC2インスタンスにMySQLをインストールし、初期設定を行う方法を説明しました。
MySQLは「データベース管理システム」の一つで、Webアプリケーションのデータを効率的に保存・管理するために必要不可欠なコンポーネントです。
次回の記事では、このMySQLを使ってWordPressを動かすための設定方法を解説します。