読者です 読者をやめる 読者になる 読者になる

MySQLでAUTO_INCREMENTを任意の数字に変更する

Redmine のチケットを復活させた ときに、誤ってissuesテーブルに違うtsvを食わせてしまい、ゴミデータを追加してauto_incrementの数字を大きくしてしまった。

手動で直したので、そのときの手順。

手順

状況確認

Auto_increment列をみる。

show table status like 'issues'\G;
mysql> show table status like 'issues'\G;
*************************** 1. row ***************************
           Name: issues
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 4713
 Avg_row_length: 1004
    Data_length: 4734976
Max_data_length: 0
   Index_length: 1376256
      Data_free: 9437184
 Auto_increment: 13008
    Create_time: 2013-09-12 16:06:01
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)

ERROR: 
No query specified

昨日まで5000くらいだったのに…

データをバックアップしておく

壊れたデータなのでいらないと思うけど、一応バックアップしておく。

mysql -u redmine -p -D redmine_db -e'select * from issues where id > 5348;' > issues.tsv

AUTO_INCREMENTを変更する

AUTO_INCREMENTで指定した数字より大きいidがなければ、正しく変更されるはず。

ALTER TABLE issues AUTO_INCREMENT = 5348;

変更できてなくても、Query OKが返ってくるので注意。しっかり確認すべし。

mysql> ALTER TABLE issues AUTO_INCREMENT = 5348;
Query OK, 5068 rows affected (0.98 sec)
Records: 5068  Duplicates: 0  Warnings: 0