1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

最近、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なカラムが歯抜けになる理由を調べてみる
innodb_autoinc_lock_mode <> 0 でINSERT .. SELECT .. をかけた時にauto_incrementなカラムが歯抜けになる理由を調べてみる

では、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 パラメーターグループの値を変更する方法を教えてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?