Vagrant 環境での MySQL 接続エラーと解決法

## **1. Vagrantfile の構文エラー (`syntax error, unexpected 'end'`)**

### **エラー内容**
```sh
Vagrant failed to initialize at a very early stage:
C:/vagrant/centos74/Vagrantfile:79: syntax error, unexpected `end'
```

### **原因**
- `do ... end` や `if ... end` のブロックが正しく閉じられていない。
- `<<-SHELL` の閉じ忘れ。

### **解決策**
1. `Vagrantfile` を開き、`end` の前後のコードを確認。
2. **ブロックが正しく閉じているか確認**（特に `<<-SHELL` を使用している場合）。
3. 修正後、以下を実行。
   ```sh
   vagrant reload
   ```

---

## **2. SSH 接続時のホストキーエラー (`REMOTE HOST IDENTIFICATION HAS CHANGED!`)**

### **エラー内容**
```sh
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Host key verification failed.
```

### **原因**
- Vagrant を再作成 (`vagrant destroy && vagrant up`) したことで **SSHホストキーが変更された**。

### **解決策**
1. **古いホストキーを削除**
   ```sh
   ssh-keygen -R [127.0.0.1]:2222
   ```
2. **再度 SSH 接続を試す**
   ```sh
   ssh.exe -N -L 3307:127.0.0.1:3306 vagrant@127.0.0.1 -p 2222 -i "C:/vagrant/centos74/.vagrant/machines/default/virtualbox/private_key"
   ```
3. `yes` を入力し、新しいホストキーを受け入れる。

---

## **3. `PasswordAuthentication no` のまま変わらない**

### **エラー内容**
```sh
vagrant ssh-config
...
PasswordAuthentication no
```

### **原因**
- `Vagrantfile` や `sshd_config` の設定が正しく反映されていない。
- SSH サービスの再起動が必要。

### **解決策**
1. Vagrant 内にログイン。
   ```sh
   vagrant ssh
   ```
2. `sshd_config` を編集。
   ```sh
   sudo nano /etc/ssh/sshd_config
   ```
   **以下を確認・修正**
   ```sh
   PasswordAuthentication yes
   UsePAM yes
   ```
3. SSH を再起動。
   ```sh
   sudo systemctl restart ssh
   ```
4. Vagrant を再起動。
   ```sh
   vagrant reload --provision
   ```

---

## **4. MySQL への接続エラー (`Can't connect to MySQL server`)

### **エラー内容**
```sh
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1'
```

### **原因**
- MySQL サーバーが停止している。
- SSH トンネルが適切に設定されていない。

### **解決策**
1. **Vagrant 内部で MySQL の状態を確認**
   ```sh
   vagrant ssh
   sudo systemctl status mysql
   ```
   ✅ `active (running)` ならOK。`inactive` なら以下を実行。
   ```sh
   sudo systemctl start mysql
   ```

2. **手動で MySQL に接続できるか確認**
   ```sh
   mysql -u homestead -p
   ```
   - パスワードは `secret` または `vagrant`

3. **ポートフォワードを再設定**
   ```sh
   ssh.exe -N -L 3307:127.0.0.1:3306 vagrant@127.0.0.1 -p 2222 -i "C:/vagrant/centos74/.vagrant/machines/default/virtualbox/private_key"
   ```

---

## **5. HeidiSQL での MySQL 接続エラー**

### **エラー例**
- **接続できない**
- **タイムアウトする**

### **解決策**
#### **HeidiSQL の基本設定**
| 設定項目          | 値 |
|-----------------|------------------------------|
| **ネットワークタイプ** | `MySQL (SSHトンネル経由)` |
| **ホスト名/IP** | `127.0.0.1` |
| **ポート** | `3307` |
| **ユーザー名** | `homestead` |
| **パスワード** | `secret` |
| **データベース** | （空欄のままでOK） |

#### **SSHタブの設定**
| 設定項目          | 値 |
|-----------------|------------------------------|
| **SSHホスト** | `127.0.0.1` |
| **SSHポート** | `2222` |
| **SSHユーザー** | `vagrant` |
| **認証方法** | `Public Key` |
| **SSH キーファイル** | `C:/vagrant/centos74/.vagrant/machines/default/virtualbox/private_key` |
| **ローカルポート** | `3307` |
| **リモートポート** | `3306` |

---

## **まとめ**
- **SSH のホストキー変更時は `ssh-keygen -R [127.0.0.1]:2222` でリセット**
- **`PasswordAuthentication yes` を適用後、SSH を再起動 (`sudo systemctl restart ssh`)**
- **Vagrant で `reload --provision` して設定を反映**
- **HeidiSQL の SSH 設定を正しく入力**