Amazon RDS MySQLのAUTOINCREMENTが飛んでしまう。

最近、AWSからIT分野に触れだしました。そのため、問題が発生した際など、どのようにトラブルシュートを行えばよいかわからず、大苦戦しながらも、自己学習に励んでおります。

DBに触れた経験が乏しく、理解が甘いですが、
同じ過ちを起こさないように、同じ問題が発生した際に、素早く対応できるように覚書程度に記録を残しておきます。
INSERTした際に下記のエラーが発生してしまいました。
```
ERROR: 2019/08/02 10:41:31 Error on MySQL INSERT Exec: Error 1467: Failed to                                          read auto-increment value from storage engine
```

Amazon RDSを利用しておりますので、最終的には、パラメータグループを変更することにより解決できました。


```
mysql> show table status;
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name     | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment       | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment |
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| unicorn  | InnoDB |      10 | Dynamic    |    0 |              0 |       16384 |               0 |        16384 |         0 |                    1 | 2019-08-02 07:05:21 | NULL                | NULL       | latin1_swedish_ci |     NULL |                |         |
| unicorns | InnoDB |      10 | Dynamic    |  113 |            144 |       16384 |               0 |        16384 |         0 | 18446744073709551615 | 2019-08-02 07:23:37 | 2019-08-02 10:11:02 | NULL       | latin1_swedish_ci |     NULL |                |         |
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
2 rows in set (0.00 sec)
```
Auto_incrementの値が18446744073709551615で最大値に達しており、割り当てる値がないことによりエラーが発生しておりました。

idを確認してみると,idが歯抜けになってます。

```
mysql> select * from unicorns;
+----------------------+----------------------------------------------+--------------+
|        id            |        location                              | requestvalue |
+----------------------+----------------------------------------------+--------------+
|                    1 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|                    2 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|                    3 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|                    4 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|             67810132 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|             95487191 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|            683000000 | UNICORNNAMEDBINSERTTEST                      | NULL         |
|          46279800000 | UNICORNNAMEDBINSERTTEST                      | NULL         |
| 18446744073709551615 | UNICORNNAMEDBINSERTTEST                      | NULL         |
```
問題点

```
mysql> SELECT @@innodb_autoinc_lock_mode;
+----------------------------+
| @@innodb_autoinc_lock_mode |
+----------------------------+
|                          1 |
+----------------------------+
```
innodb_autoinc_lock_mode = 1 になっているため、高速化のために、歯抜けになっていしますらしい。

「--innodb_autoinc_lock_mode=0」オプションを付けて起動することで解決する。
#解決策、参考
[innodb_autoinc_lock_mode <> 0 でINSERT .. SELECT .. をかけた時にauto_incrementなカラムが歯抜けになる理由を調べてみる](https://yoku0825.blogspot.com/2019/01/innodbautoinclockmode-0-insert-select.html)
[innodb_autoinc_lock_mode <> 0 でINSERT .. SELECT .. をかけた時にauto_incrementなカラムが歯抜けになる理由を調べてみる](https://yoku0825.blogspot.com/2019/01/innodbautoinclockmode-0-insert-select.html)

#では、RDSのパラメータの変更方法について。
Amazon RDS→パラメータグループ→パラメータグループの作成→任意の名前(unicorn)を付けて作成
RDS→パラメータフループ→unicorn→パラメータ[innodb_autoinc_lock_mode]→値[0]→変更の保存
RDS→データベース→unicorndb→変更→データベースの設定→DBパラメータグループ作成したもの(unicorn)を選択→変更をすぐに適応→再起動

再起動後に確認

```
mysql> SELECT @@innodb_autoinc_lock_mode;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    5
Current database: unicorndb

+----------------------------+
| @@innodb_autoinc_lock_mode |
+----------------------------+
|                          0 |
+----------------------------+
1 row in set (0.06 sec)
```
無事にパラメータを変更することができました。

[Amazon RDS DB パラメーターグループの値を変更する方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-modify-parameter-group-values/)