初心者にもわかるMySQL導入ガイド - EC2へのデータベースセットアップ

# 

## はじめに

[前回の記事](リンク)では、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鍵のインポート

```bash
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リポジトリパッケージのダウンロード

```bash
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
```

**このコマンドで何が起きているのか**:
- `wget`: インターネットからファイルをダウンロードするコマンド
- URL: MySQLの公式サイトからリポジトリ情報を含むRPMパッケージをダウンロード

**なぜこれが必要なのか**:
このファイルには、MySQLの最新バージョンをダウンロードするためのリポジトリ（ソフトウェアの保管場所）情報が含まれています。AmazonのEC2にはデフォルトでMySQLのリポジトリが含まれていないため、追加する必要があります。

#### 1-3. ダウンロードの確認

```bash
ls -la
```

**このコマンドで何が起きているのか**:
- `ls`: ディレクトリ内のファイル一覧を表示
- `-la`: 隠しファイルも含めて詳細情報を表示

**何を確認するのか**:
ダウンロードしたファイル `mysql80-community-release-el7-5.noarch.rpm` が存在することを確認します。このファイルが表示されれば、ダウンロードは成功です。

### 2. MySQLリポジトリの追加

```bash
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サーバーのインストール

```bash
sudo yum install -y mysql-community-server
```

**このコマンドで何が起きているのか**:
- `sudo yum install`: 指定したパッケージをインストール
- `-y`: すべての確認に自動で「yes」と答える
- `mysql-community-server`: MySQLサーバーのパッケージ名

**なぜこれが必要なのか**:
これがMySQLデータベースサーバー本体のインストールコマンドです。データベースサーバーとその動作に必要なすべての依存関係がインストールされます。

このインストールにはしばらく時間がかかることがあります。完了すると「Complete!」と表示されます。

### 4. MySQLのバージョン確認

```bash
mysql --version
```

**このコマンドで何が起きているのか**:
MySQLクライアントのバージョンを表示します。

**なぜこれが必要なのか**:
このコマンドで、MySQLが正しくインストールされていることと、そのバージョンを確認できます。

出力例: `mysql  Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)`

### 5. MySQLサーバーの起動

```bash
sudo systemctl start mysqld
```

**このコマンドで何が起きているのか**:
- `sudo systemctl start`: 指定したサービスを起動
- `mysqld`: MySQLデーモン（サーバープロセス）

**なぜこれが必要なのか**:
インストールしただけでは、MySQLサーバーは自動的に起動しません。このコマンドで明示的にMySQLサーバーを起動します。

### 6. MySQLサーバーの状態確認

```bash
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. 初期パスワードの確認

```bash
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への接続

```bash
mysql -u root -p
```

**このコマンドで何が起きているのか**:
- `mysql`: MySQLクライアントを起動
- `-u root`: rootユーザーとしてログイン
- `-p`: パスワードを使用してログイン

パスワードを求められたら、先ほどメモした一時パスワードを入力します。

**なぜこれが必要なのか**:
このコマンドでMySQLサーバーに接続します。接続に成功すると、MySQLのコマンドプロンプト（`mysql>`）が表示されます。

### 9. MySQLのセキュリティ設定

```bash
mysql_secure_installation
```

**このコマンドで何が起きているのか**:
MySQLのセキュリティを強化するための対話式セットアップツールが起動します。

**なぜこれが必要なのか**:
初期状態のMySQLには、セキュリティ上の弱点がいくつかあります。このコマンドでそれらを改善し、より安全な設定にします。

このセットアップでは以下の操作を行います：
1. rootパスワードの変更
2. 匿名ユーザーの削除
3. rootのリモートログイン禁止
4. テストデータベースの削除
5. 権限テーブルの再読み込み

画面の指示に従って設定を進めます。通常はすべての質問に「Y」（Yes）と答えるのが安全です。

### 10. MySQLサーバーの自動起動設定

```bash
sudo systemctl enable mysqld
```

**このコマンドで何が起きているのか**:
- `sudo systemctl enable`: システム起動時に自動的に起動するよう設定
- `mysqld`: MySQLデーモン（サーバープロセス）

**なぜこれが必要なのか**:
このコマンドにより、EC2インスタンスを再起動してもMySQLサーバーが自動的に起動するようになります。

### 11. 自動起動設定の確認

```bash
systemctl is-enabled mysqld
```

**このコマンドで何が起きているのか**:
MySQLサーバーが自動起動に設定されているかを確認します。

**何を確認するのか**:
出力が `enabled` であれば、自動起動が正しく設定されています。

## MySQLの基本的な使い方

MySQLのインストールと初期設定が完了したら、基本的な使い方を試してみましょう。

### データベースの作成

MySQLに接続した状態で以下のコマンドを実行します：

```sql
CREATE DATABASE testdb;
```

### データベースの一覧表示

```sql
SHOW DATABASES;
```

### MySQLからの切断

```sql
EXIT;
```

## トラブルシューティング

### Q: `mysql --version` コマンドで「command not found」と表示される

A: MySQLクライアントがインストールされていない可能性があります。以下のコマンドでインストールしてください：
```bash
sudo yum install -y mysql-community-client
```

### Q: MySQLサーバーが起動しない

A: 以下のコマンドでエラーログを確認します：
```bash
sudo tail -f /var/log/mysqld.log
```

### Q: 一時パスワードが見つからない

A: ログファイル全体を確認してみましょう：
```bash
sudo cat /var/log/mysqld.log | grep password
```

## まとめ

この記事では、EC2インスタンスにMySQLをインストールし、初期設定を行う方法を説明しました。

MySQLは「データベース管理システム」の一つで、Webアプリケーションのデータを効率的に保存・管理するために必要不可欠なコンポーネントです。

次回の記事では、このMySQLを使ってWordPressを動かすための設定方法を解説します。

## 参考リソース

- [MySQL公式ドキュメント](https://dev.mysql.com/doc/)
- [Amazon Linux 2でのMySQLインストールガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html#mysql-lamp-al2)