Bug #41116 mysql server resets AUTO_INCREMENT upon server restart for empty tables
Submitted: 28 Nov 2008 23:20 Modified: 29 Nov 2008 22:27
Reporter: David Anderson Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server: General Severity:S2 (Serious)
Version:5.0.51b-community-nt OS:Windows (Vista)
Assigned to: CPU Architecture:Any
Tags: auto_increment, empty table

[28 Nov 2008 23:20] David Anderson
Description:
When started, mysql server is automatically resetting the AUTO_INCREMENT value for tables which are empty (does not reset the value for non-empty tables).  Note: mysql is ONLY doing this for tables which are empty; tables which have records in them are not having their AUTO_INCREMENT value reset.  See example below.  Is their any way to disable server's resetting this value?

How to repeat:
CREATE TABLE zbugtest LIKE descriptions;
DESCRIBE  zbugtest;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| info       | text                | YES  |     | NULL    |                |
| created_at | datetime            | YES  |     | NULL    |                |
| updated_at | datetime            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

ALTER TABLE zbugtest AUTO_INCREMENT = 16777217;

SHOW TABLE STATUS\G
           Name: zbugtest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 0
 Auto_increment: 16777217  <<-------------------
    Create_time: 2008-11-28 14:50:15
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 7168 kB

Exit mysql client
Restart computer (which shuts down, then restarts mysql server)
Start mysql client

SHOW TABLE STATUS\G
           Name: zbugtest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 0
 Auto_increment: 1     <<--------------------
    Create_time: 2008-11-28 14:50:15
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 7168 kB

Suggested fix:
unacceptable work around: insert at least one row of dummy data in every new table.
[29 Nov 2008 1:33] David Anderson
The error also occurs if I’ve created a non-null record, then deleted it (table now empty of rows), stop, restart server.

The error even occurs if I’ve created a non-null record, stop/started server, verified record exists, then delete it (table now empty of rows), stop, restart server.
[29 Nov 2008 22:27] MySQL Verification Team
Thank you for the bug report. That behavior is a restriction of InnoDB tables, please read: http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html.
Below you can notice MyISAM table isn't affected by this behavior:

c:\dbs>c:\dbs\5.0\bin\mysql -uroot --port=3500 --prompt="mysql 5.0 > "
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.74-nt-debug-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql 5.0 > use test
Database changed
mysql 5.0 > create table i (id serial) engine InnoDB;
Query OK, 0 rows affected (0.09 sec)

mysql 5.0 > create table m (id serial) engine MyISAM;
Query OK, 0 rows affected (0.06 sec)

mysql 5.0 > alter table i AUTO_INCREMENT = 16777217;
Query OK, 0 rows affected (0.33 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql 5.0 > alter table m AUTO_INCREMENT = 16777217;
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql 5.0 > SHOW TABLE STATUS\G
*************************** 1. row ***************************
           Name: i
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 16777217
    Create_time: 2008-11-29 19:20:18
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 12288 kB
*************************** 2. row ***************************
           Name: m
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 2533274790395903
   Index_length: 1024
      Data_free: 0
 Auto_increment: 16777217
    Create_time: 2008-11-29 19:21:09
    Update_time: 2008-11-29 19:21:09
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
2 rows in set (0.09 sec)

mysql 5.0 > exit
Bye

c:\dbs>50s

c:\dbs>c:\dbs\5.0\bin\mysqladmin -uroot --port=3500 shutdown

c:\dbs>50c

c:\dbs>c:\dbs\5.0\bin\mysql -uroot --port=3500 --prompt="mysql 5.0 > "
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.74-nt-debug-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql 5.0 > use test
Database changed
mysql 5.0 > SHOW TABLE STATUS\G
*************************** 1. row ***************************
           Name: i
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 1
    Create_time: 2008-11-29 19:20:18
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 12288 kB
*************************** 2. row ***************************
           Name: m
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 2533274790395903
   Index_length: 1024
      Data_free: 0
 Auto_increment: 16777217
    Create_time: 2008-11-29 19:21:09
    Update_time: 2008-11-29 19:21:09
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
2 rows in set (0.03 sec)

mysql 5.0 >