【AWS】WordPress用にデータベース作成（Part２）

[**【TOPへ戻る】**](https://qiita.com/ponponpoko/items/fb552d562f80c0af0f49)
　[**Part１：WebサーバーにPHPをインストール**](https://qiita.com/ponponpoko/items/954c1181824582ed642d)
　[**Part２：WordPress用にデータベース作成**](https://qiita.com/ponponpoko/items/d7e5f2c1df16925ced72)
　[**Part３：WordPressのインストールと設定**](https://qiita.com/ponponpoko/items/1291a654eec95614580a)
# Part２：WordPress用にデータベース作成
Webサーバーから作成した[**RDS MySQL**](https://qiita.com/ponponpoko/items/4e1304bf3d9901d1eaf0)に接続し、データベースを作成します。

```sql:データベース作成
/* 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.
Your MySQL connection id is 272
Server version: 8.0.31 Source distribution

/* WordPressで使用するデータベースを作成' */
/* CREATE DATABASE [データベース名] DEFAULT CHARACTER SET [文字コード] COLLATE [照合順序];' */
MySQL [(none)]> create database wordpress_db default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.04 sec)

/* 作成したデータベースが存在することを確認 */
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_table         |
| wordpress_db       |
+--------------------+
6 rows in set (0.03 sec)
```
:::note info
***【作成したRDS MySQLのエンドポイント確認】***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/42ec1fb0-4f75-7a3f-c222-6346f6fdd48a.png)
:::
::: note info
[**【RDS MySQLインスタンスに接続】**]()
\# MySQL Server に接続
mysql -u ユーザー名 -p [データベース名] -h [IP|URL]

[**【公式ドキュメント】：4.2.4 コマンドオプションを使用したMySQL Serverへの接続**](https://dev.mysql.com/doc/refman/8.0/ja/connecting.html)
:::

:::note info
[**【データベースの作成方法】**](https://uxmilk.jp/12421)
\# データベースの作成
CREATE DATABASE データベース名;
\# デフォルト文字コードの指定
CREATE DATABASE データベース名 DEFAULT CHARACTER SET 文字コード;
\# データベース照合順序の指定
CREATE DATABASE データベース名 COLLATE 照合順序;

[**【公式ドキュメント】：13.1.10 CREATE DATABASE 構文**](https://dev.mysql.com/doc/refman/8.0/ja/create-database.html)
:::
:::note info
[**【照合順序ってなに？】**](https://kojimanotech.com/2021/07/03/325/#:~:text=%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82-,%E7%85%A7%E5%90%88%E9%A0%86%E5%BA%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%A3%E3%81%9F%E3%81%84%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%EF%BC%9F,%E3%81%8C%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F%E3%82%8A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)
データの並べ替えや比較を行うための規則のことを照合順序と言います。
全角半角を区別したり、逆に区別しないようにする設定ができます。
そうすることでデータの並び順が変わったり、クエリの検索結果が変わったりします。

[**【公式ドキュメント】：10.1 一般の文字セットおよび照合順序**](https://dev.mysql.com/doc/refman/8.0/ja/charset-general.html)
[**【その他ドキュメント】：【MySQL】照合順序とは？**](https://qiita.com/kazu56/items/6af85ffcf8d3954455ad)
[**【その他ドキュメント】：文字セットと照合順序**](https://www.javadrive.jp/mysql/ini/index5.html)
:::

続いてはWordPless用のユーザーを作成し、
対象のデータベースにアクセスし操作できる権限を付与していきます。
```sql:ユーザー作成＆権限付与
/* WordPress用にユーザーを作成 */
/* CREATE USER '[ユーザー名]'@'[接続元のホスト名]' IDENTIFIED BY 'パスワード'; */
/* [%]は、任意の0文字以上の文字列を表す(ワイルドカード文字) =「任意のホスト」 */
MySQL [(none)]> create user 'wordpress_user'@'%' identified by 'password';
Query OK, 0 rows affected (0.04 sec)

/* 作成したユーザーに権限付与 */
/* GRANT [権限] ON [データベースレベル(使用できるDB)] TO '[ユーザー名]'@'[接続元のホスト名]'; */
MySQL [(none)]> grant all on wordpress_db.* to 'wordpress_user'@'%';
Query OK, 0 rows affected (0.02 sec)

/* 権限の有効化 */
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

/* 作成したユーザーが存在することを確認 */
MySQL [(none)]> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| admin            | %         |
| wordpress_user   | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| rdsadmin         | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

```
:::note info
[**【ユーザーの作成方法】**](https://www.sejuku.net/blog/82303)
\# ユーザー作成
CREATE USER 'ユーザー名' IDENTIFIED BY 'パスワード';

[**【公式ドキュメント】：13.7.1.3 CREATE USER ステートメント**](https://dev.mysql.com/doc/refman/8.0/ja/create-user.html#create-user-password-management)
[**【公式ドキュメント】：6.2.4 アカウント名の指定**](https://dev.mysql.com/doc/refman/8.0/ja/account-names.html)
:::
:::note info
[**【ユーザーに権限を付与する方法】**](https://style.potepan.com/articles/18727.html)
\# ユーザーに権限付与 
GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';

[**【公式ドキュメント】：13.7.1.6 GRANT ステートメント**](https://dev.mysql.com/doc/refman/8.0/ja/grant.html)
<font color="FireBrick">※ 権限の種類も上記のリンクに記載されています。
　 (表 13.1 GRANT および REVOKE に対して許容可能な権限)</font>

:::
:::note info
[**【FLUSH PRIVILEGES とは？】**](https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0080)
データベース内のGRANTテーブルから再読込を実行します。通常、各ユーザ権限とINSTALL PLUGINの情報を、MySQLサーバーはキャッシュに保持しており、この情報を最新化する場合はFLUSH PRIVILEGESを実行する必要があります。CREATE USERやGRANT構文を実行した場合は自動で再読込が実行されるため必要ありませんが、テーブルを直接変更した場合はFLUSH PRIVILEGESを実行する必要があります。

[**【公式ドキュメント】：6.2.6 権限変更が有効化される時期**](https://dev.mysql.com/doc/refman/5.6/ja/privilege-changes.html)
[**【公式ドキュメント】：13.7.8.3 FLUSH ステートメント**](https://dev.mysql.com/doc/refman/8.0/ja/flush.html)
:::
:::note info
[**【mysql.user とは？】**](https://dev.mysql.com/doc/refman/5.6/ja/default-privileges.html)
 MySQL ユーザーアカウントとそのアクセス権限を定義している付与テーブルである。
mysql.user テーブルにどのアカウントが存在するか、それらのパスワードが空かどうかを表示するには、次のステートメントを使用します。
**SELECT User, Host, Password FROM mysql.user;**
:::
最後に作成したユーザーでログインできるか確認し、
作成したデータベースにアクセスしてみる。
```sql:接続確認
/* 一旦ログオフし作成したユーザーでログインできるか確認 */
[root：/]# mysql -u wordpress_user -p -h mysql-db.chwgidx2g0zh.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MariaDB monitor. 
Your MySQL connection id is 282
Server version: 8.0.31 Source distribution

/* 作成したユーザーでデータベース一覧を確認 */
/* 触れるデータベースしか表示されない。*/
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| wordpress_db       |
+--------------------+
3 rows in set (0.00 sec)

/* 作成したユーザーで対象のデータベースにアクセスできるか確認 */
MySQL [(none)]> use wordpress_db;
Database changed
```
[**Part３：WordPressのインストールと設定 に続く・・・・。**](https://qiita.com/ponponpoko/items/1291a654eec95614580a)

# 備考
- [**MySQL 8.0 リファレンスマニュアル**](https://dev.mysql.com/doc/refman/8.0/ja/)
- [**【MySQL】ワイルドカードを使って あいまい検索する**](https://26gram.com/mysql-like)