【AWS】WebサーバーからRDS MySQLに接続（Part３）

[**【TOPへ戻る】**](https://qiita.com/ponponpoko/items/4e1304bf3d9901d1eaf0)
　[**Part１：RDS作成前の事前準備**](https://qiita.com/ponponpoko/items/4b57170e5617f3259300)
　[**Part２：RDS MySQLの作成**](https://qiita.com/ponponpoko/items/2187f2eef73135a18a59)
　[**Part３：WebサーバーからRDS MySQLに接続**](https://qiita.com/ponponpoko/items/af684509bc553986d1ac)
# Part３：WebサーバーからRDS MySQLに接続
ではいよいよ作成した[**Webサーバー**](https://qiita.com/ponponpoko/items/e5553ef3ace2e4cb5633)からRDS MySQLに接続していきます。
まず最初にWebサーバーにMySQLクライアントをインストールします。

:::note info 
[**【 MySQLクライアントとは ？】**](https://www.fenet.jp/infla/column/technology/mysql%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A8%E3%81%AF%EF%BC%9Fmysql-server%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E3%83%BBmysql-comman/#:~:text=MySQL%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A8%E3%81%AF%E3%80%81MySQL,%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)
MySQLサーバ対するクライアントのことをいう。MySQLサーバにクライアントとして接続し、データベース上のデータにアクセスしてデータを抽出したり、データベースを構築したりすることができる。
:::
```shell:Webサーバー（EC2クライアント：amazon linux）
### パッケージをインストールするため[root]ユーザーにスイッチ
[ec2-user： /]$ sudo su -
Last login: Fri Jan 20 02:13:42 UTC 2023 on pts/0

### パッケージのアップデート
[root：/]# yum update
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
No packages marked for update

### 今回は、このパッケージをインストール
[root：/]# yum info mariadb
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
Name        : mariadb
Arch        : x86_64
Epoch       : 1
Version     : 5.5.68
Release     : 1.amzn2
Size        : 49 M
Repo        : installed
From repo   : amzn2-core
Summary     : A community developed branch of MySQL
URL         : http://mariadb.org
License     : GPLv2 with exceptions and LGPLv2 and BSD
Description : MariaDB is a community developed branch of MySQL.
            : MariaDB is a multi-user, multi-threaded SQL database server.
            : It is a client/server implementation consisting of a server daemon (mysqld)
            : and many different client programs and libraries. The base package
            : contains the standard MariaDB/MySQL client programs and generic MySQL files.


### MySQLクライアントをインストール
[root：/]# yum -y install mysql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.68-1.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================
 Package                   Arch                     Version                             Repository                    Size
===========================================================================================================================
Installing:
 mariadb                   x86_64                   1:5.5.68-1.amzn2                    amzn2-core                   8.8 M

Transaction Summary
===========================================================================================================================
Install  1 Package

Total download size: 8.8 M
Installed size: 49 M
Downloading packages:
mariadb-5.5.68-1.amzn2.x86_64.rpm                                                                   | 8.8 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.68-1.amzn2.x86_64                                                                         1/1
  Verifying  : 1:mariadb-5.5.68-1.amzn2.x86_64                                                                         1/1

Installed:
  mariadb.x86_64 1:5.5.68-1.amzn2

Complete!
```
これでMySQLクライアントのインストールは、完了です。
続いて作成したRDS MySQL（サーバー）に接続していきます。

RDSコンソールから、作成したRDSのエンドポイントをコピーします。

:::note info
[**【AWSのエンドポイントとは？】**](https://and-engineer.com/articles/YNAX3xMAACoAJUMR)
AWSのサービスに接続するために必要なURLを指します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/caf69cc6-0708-9817-b796-abd24f320cb7.png)
取得したエンドポイントを使い、WebサーバーからRDS MySQL（サーバー）に接続します。
```shell:Webサーバー（EC2クライアント：amazon linux）
### RDS MySQL Server に接続
### オプション[ -u = ユーザーID / -p = パスワード / -h 接続するホスト(エンドポイント) ]
[root：/]# mysql -u admin -p -h mysql-db.chwgidx2g0zh.ap-northeast-1.rds.amazonaws.com
Enter password:

### ログインが成功した場合
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 424
Server version: 8.0.31 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>

### ログインが失敗した場合
ERROR 1045 (28000): Access denied for user 'admin'@'10.0.1.10' (using password: YES)
```
::: note warn
【ログインがうまくいかない場合】

- 作成したRDSのステータスは、利用可能状態ですか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/3cd6f995-e1b8-6e76-555a-0ce090d23023.png)

- セキュリティグループやVPCは、正しく設定されていますか？
　-　セキュリティグループ：Webサーバーからのアクセスを有効にしているか確認
　-　VPC：Webサーバーと同じVPCにいるか確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/2dc16026-9baa-255b-b095-b0a48017c689.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/d0e6be05-21ae-e89b-cd8d-68e7601a8534.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/25c5c998-77e5-35ed-ce3e-27de7ea4ff08.png)


- RDSを作成する際に指定したユーザーIDでログインしていますか？ 
　-　設定画面からユーザーIDを確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/74968391-fd2e-0bea-c37c-865fb1e2ce25.png)

- 入力したパスワードは、正しいですか？
　-　忘れてしまった場合、パスワードを変更することができます。[【リンク】](https://aws.amazon.com/jp/premiumsupport/knowledge-center/reset-master-user-password-rds/)

上記で解決しなかった場合は、下記リンクを参照してください。
[Amazon RDS DB インスタンスに接続する際の問題を解決するにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-cannot-connect/)
:::
これでWebサーバーからRDS MySQL（サーバー）への接続は完了です。
ちょっと勉強がてらに、軽く遊んで終わります。

```sql:RDS MySQL
### データベース一覧表示
### RDS作成時に指定したデータベース[test_table]があることが確認できる。

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_table         |
+--------------------+
5 rows in set (0.03 sec)


### データベース[test_table]へ変更
MySQL [(none)]> use test_table;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


### テーブル一覧表示
MySQL [test_table]> show tables;
+----------------------+
| Tables_in_test_table |
+----------------------+
| m_users              |
+----------------------+
1 row in set (0.00 sec)


### テーブル[m_users]定義の確認
MySQL [test_table]> desc m_users;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int          | NO   | PRI | NULL    | auto_increment |
| user_name    | varchar(100) | NO   |     | NULL    |                |
| mail_address | varchar(200) | NO   |     | NULL    |                |
| password     | varchar(100) | NO   |     | NULL    |                |
| created      | datetime     | YES  |     | NULL    |                |
| modified     | datetime     | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)


### テーブル[m_users]の中を表示(検索)
MySQL [test_table]> SELECT * FROM m_users;
+----+-----------+------------------+----------+---------------------+---------------------+
| id | user_name | mail_address     | password | created             | modified            |
+----+-----------+------------------+----------+---------------------+---------------------+
|  1 | Qii Taro  | qiitaro@hoge.com | 123123   | 2023-01-19 13:12:25 | 2023-01-19 13:12:25 |
+----+-----------+------------------+----------+---------------------+---------------------+
1 row in set (0.01 sec)


### テーブル[m_users]にデータを挿入
MySQL [test_table]> INSERT INTO m_users (user_name, mail_address, password) VALUES ('Takeshi', 'takenoko@hoge.com', 123456);
Query OK, 1 row affected (0.02 sec)


### テーブル[m_users]の中を表示(検索)
MySQL [test_table]> SELECT * FROM m_users;
+----+-----------+-------------------+----------+---------------------+---------------------+
| id | user_name | mail_address      | password | created             | modified            |
+----+-----------+-------------------+----------+---------------------+---------------------+
|  1 | Qii Taro  | qiitaro@hoge.com  | 123123   | 2023-01-19 13:12:25 | 2023-01-19 13:12:25 |
|  2 | Takeshi   | takenoko@hoge.com | 123456   | NULL                | NULL                |
+----+-----------+-------------------+----------+---------------------+---------------------+
2 rows in set (0.01 sec)


### テーブル[m_users]のカラム(行)[id]の[2]番を削除
MySQL [test_table]> DELETE FROM m_users WHERE id = 2;
Query OK, 1 row affected (0.00 sec)


### テーブル[m_users]の中を表示(検索)
MySQL [test_table]> SELECT * FROM m_users;
+----+-----------+------------------+----------+---------------------+---------------------+
| id | user_name | mail_address     | password | created             | modified            |
+----+-----------+------------------+----------+---------------------+---------------------+
|  1 | Qii Taro  | qiitaro@hoge.com | 123123   | 2023-01-19 13:12:25 | 2023-01-19 13:12:25 |
+----+-----------+------------------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

MySQL [test_table]>
```

:::note info
**【MySQLに関する情報はこちら（おすすめ）】**

- [【MySQL】データベースとは？構造や仕組み、テーブルとの違いを解説](https://kitsune.blog/db-summary)
- [【初心者】MySQLをLinux（CentOS）にインストールして起動しよう！](https://kitsune.blog/mysql-install)
- [【初心者でも簡単】MySQLコマンドの使い方！DBやテーブルをSQLで操作しよう！](https://kitsune.blog/mysql-command#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E7%A2%BA%E8%AA%8D)
- [MySQL 8.0 リファレンスマニュアル](https://dev.mysql.com/doc/refman/8.0/ja/)
- [UNIX/Linuxの部屋 mysqlコマンドの使い方](http://x68000.q-e-d.net/~68user/unix/pickup?mysql#prgmemo-mysql-date-type)
- [よく使うMySQLコマンド&構文集](https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%B8%80%E8%A6%A7%E3%81%AE%E8%A1%A8%E7%A4%BA)
- [MySQLのコマンドラインで入力をキャンセルする](https://qiita.com/ysti/items/b4a84691c357167c89c2)
:::
::: note warn
MySQL は、RDMSであってデータベース自体ではない。
RDMSがデータベースを管理している。
データベースの中にテーブルは存在し、その中にデータが入っている。
:::