This may not be a very elegant solution, but you can do this just to get the
inserts going again:

ALTER TABLE users
MODIFY COLUMN uid INTEGER UNSIGNED NOT NULL AUTO_INCREMENT;

If you don't have any negative uids, then you will be able to store 2
billion more uids.

Just out of curiosity, have you DROPPED & re-created the table?

--
Partha Dutta, Senior Consultant
MySQL Inc, NY, USA, www.mysql.com
 
Are you MySQL certified?  www.mysql.com/certification
 

> -----Original Message-----
> From: Ricardo Oliveira [mailto:[EMAIL PROTECTED]
> Sent: Monday, May 16, 2005 5:00 PM
> To: mysql@lists.mysql.com
> Subject: auto_increment trouble (not the usual check || alter table
> solution, though)
> 
> Hi everyone,
> 
> First time on the list, although I've been (quietly) a (not-so)long-time
> quiet observer. This isn't a FAQ and I can assure
> you I've tried every procedure out there (both on and off-list) to solve
> it.
> 
> A couple weeks ago, I started having problems with a MyISAM table which
> holds records from user profiles. It's a very simple table, with one
> auto_increment field and a bunch of other field - nothing out of the
> ordinary.
> To those of you familiar with slashcode, it's an old version of the
> users table:
> 
> CREATE TABLE users (
>   uid int(11) NOT NULL auto_increment,
>   nickname varchar(20) NOT NULL default '',
>   realemail varchar(50) NOT NULL default '',
>   fakeemail varchar(50) default NULL,
>   homepage varchar(100) default NULL,
>   passwd varchar(12) NOT NULL default '',
>   sig varchar(160) default NULL,
>   seclev int(11) NOT NULL default '0',
>   matchname varchar(20) default NULL,
>   banned int(11) NOT NULL default '0',
>   permmod int(11) NOT NULL default '0',
>   PRIMARY KEY  (uid),
>   KEY login (uid,passwd,nickname),
>   KEY chk4user (nickname,realemail),
>   KEY chk4email (realemail)
> ) TYPE=MyISAM PACK_KEYS=1;
> 
> We have about 10k lines (more precisely, 10885 lines).
> Our code inserts data using a "insert into users values (NULL, .....)"
> statement which hasn't changed over the last few years. Recently, we
> started seeing the last record with a _way_ high uid value - more
> precisely, 2147483647 (which keeps new inserts from happening).
> Obviously this is a problem with the auto_increment mechanism, and we
> have followed all the (documented) and traditional approaches, which
> follow:
> 
> * search the row with the wrong uid and correct it:
> -> upon inserting a new record, its uid will be 2147483647;
> 
> * correct the uid and modify the auto_increment value from the table:
> mysql> alter table users AUTO_INCREMENT=10900;
> Query OK, 10885 rows affected (0.33 sec)
> Records: 10885  Duplicates: 0  Warnings: 0
> mysql> show table status like 'users';
> +-------+--------+------------+-------+----------------+-------------+----
> -------------+--------------+-----------+----------------+----------------
> -----+---------------------+---------------------+----------------+-------
> --+
> | Name  | Type   | Row_format | Rows  | Avg_row_length | Data_length |
> Max_data_length | Index_length | Data_free | Auto_increment |
> Create_time         | Update_time         | Check_time          |
> Create_options | Comment |
> +-------+--------+------------+-------+----------------+-------------+----
> -------------+--------------+-----------+----------------+----------------
> -----+---------------------+---------------------+----------------+-------
> --+
> | users | MyISAM | Dynamic    | 10885 |             68 |      748604
> |      4294967295 |      1051648 |         0 |     -->2147483647<-- |
> 2005-05-16 20:23:49 | 2005-05-16 20:23:49 | 2005-05-16 20:23:49 |
> pack_keys=1    |         |
> +-------+--------+------------+-------+----------------+-------------+----
> -------------+--------------+-----------+----------------+----------------
> -----+---------------------+---------------------+----------------+-------
> --+
> 
> * dump the table, make sure it doesn't have any uid above =~10k, delete
> the table and restore the table (and data) from disk:
> -> data is okay, select * from users where uid>11k shows ZERO records
> -> insert into users values (NULL,.....) results in a new row with
> uid=2147483647
> 
> * several combinations of CHECK TABLE, myisamchk (-r|-o|....), dump &&
> remore_wrong_record && restore, drop the entire database:
> -> data is OKAY, select results in no records above 11k, next insert
> will have uid=2147483647
> 
> The table fits in about 1MB on disk, and its indexes fit in about 700kB.
> 
> Does anyone have a clue? Any help is highly appreciated.
> 
> Best of regards,
>  Ricardo Oliveira
> 
> PS: Sorry for such a long message.
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to