| Bug #3658 | ALTER TABLE corrupts table | ||
|---|---|---|---|
| Submitted: | 5 May 2004 10:13 | Modified: | 27 May 2004 13:08 |
| Reporter: | Johan Andersson | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S1 (Critical) |
| Version: | mysql-4.1-alpha bk | OS: | FermiLinux 3.01 |
| Assigned to: | Magnus Blåudd | CPU Architecture: | Any |
[5 May 2004 10:13]
Johan Andersson
[5 May 2004 11:03]
Johan Andersson
Corrected synopsis
[5 May 2004 16:13]
Magnus Blåudd
The problem occured because field->query_id was not set while data was read from source table. Thus "optimizing" away the read of non PK columns. Changeset 1.1811
[26 May 2004 18:39]
Alexander Istomin
I've experienced a little bit scenario with alter table, probably it's not directly related to table corruption.
check mysql session log:
mysql> show table status;
+--------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name | Engine | 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 |
+--------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| mytab2 | MyISAM | Fixed | 13 | 25 | 325 | 107374182399 | 2048 | 0 | 14 | 2004-05-26 20:31:47 | 2004-05-26 20:32:21 | NULL | latin1_swedish_ci | NULL | | |
+--------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
1 row in set (0.00 sec)
mysql> alter table mytab2 engine=NDB;
Query OK, 13 rows affected (1.12 sec)
Records: 13 Duplicates: 0 Warnings: 0
mysql> select * from mytab2;
+------+-----------+
| col1 | col2 |
+------+-----------+
| 7 | xdddxxsss |
| 13 | xdddxxsss |
| 12 | xdddxxsss |
| 11 | xdddxxsss |
| 8 | xdddxxsss |
| 10 | xdddxxsss |
| 6 | xdddxxsss |
| 2 | xdddxxsss |
| 4 | xdddxxsss |
| 5 | xdddxxsss |
| 3 | xdddxxsss |
| 9 | xdddxxsss |
| 1 | xdddxxsss |
+------+-----------+
13 rows in set (0.15 sec)
mysql> insert into mytab2 (col2) values('xdddxxsss');
Query OK, 1 row affected (0.02 sec)
mysql> insert into mytab2 (col2) values('xdddxxsss');
Query OK, 1 row affected (0.01 sec)
mysql> insert into mytab2 (col2) values('xdddxxsss');
ERROR 1022 (23000): Can't write, duplicate key in table 'mytab2'
mysql> insert into mytab2 (col2) values('xdddxxsss');
ERROR 1022 (23000): Can't write, duplicate key in table 'mytab2'
mysql> insert into mytab2 (col2) values('xdddxxsss');
ERROR 1022 (23000): Can't write, duplicate key in table 'mytab2'
mysql> insert into mytab2 (col2) values('xdddxxsss');
ERROR 1022 (23000): Can't write, duplicate key in table 'mytab2'
mysql> select * from mytab2;
+------+-----------+
| col1 | col2 |
+------+-----------+
| 0 | xdddxxsss |
| 7 | xdddxxsss |
| 13 | xdddxxsss |
| 12 | xdddxxsss |
| 11 | xdddxxsss |
| 8 | xdddxxsss |
| 10 | xdddxxsss |
| 6 | xdddxxsss |
| 2 | xdddxxsss |
| 4 | xdddxxsss |
| 5 | xdddxxsss |
| 3 | xdddxxsss |
| 9 | xdddxxsss |
| -1 | xdddxxsss |
| 1 | xdddxxsss |
+------+-----------+
15 rows in set (0.01 sec)
mysql> desc mytab2;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| col1 | int(11) | | PRI | NULL | auto_increment |
| col2 | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
mysql> show table status;
+--------+------------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------------+----------+----------------+---------+
| Name | Engine | 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 |
+--------+------------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------------+----------+----------------+---------+
| mytab2 | ndbcluster | Fixed | 100 | 0 | 0 | NULL | 0 | 0 | 5 | NULL | NULL | NULL | latin1_swedish_ci | NULL | | |
+--------+------------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-------------------+----------+----------------+---------+
1 row in set (0.01 sec)
[27 May 2004 12:58]
Magnus Blåudd
It's the autoincrement counter that is not producing a "new" value when the insert is made.
[27 May 2004 13:08]
Magnus Blåudd
Patch for teh ALTER TABLE problem pushed to mysql-4.1 repository and verified.
