Bug #25347 Patch: mysqlcheck -A -r doesn't repair table marked as crashed
Submitted: 1 Jan 2007 16:20 Modified: 28 Jan 2008 18:19
Reporter: jocelyn fournier (Silver Quality Contributor)
Status: Closed
Category:Client Severity:S3 (Non-critical)
Version:5.0.44 OS:Linux (Linux, Windows)
Assigned to: Target Version:
Tags: bfsm_2007_12_06, bfsm_2007_11_15, qc, Contribution
Triage: D3 (Medium)

[1 Jan 2007 16:20] jocelyn fournier
Description:
Hi,

When a table is marked as crashed, mysqlcheck doesn't include it in the list of tables to
check when -A or -B database option is used.

How to repeat:
Use the command

mysqlcheck -A -r 

where a database contains a table marked as crashed.

The table will be skipped, and hence not repaired.

Suggested fix:
Crashed tables should not be skipped.
[1 Jan 2007 16:53] Valeriy Kravchuk
Thank you for a bug report. Verified just as described, also on Windows. One possible set
of steps to repeat:

1. In mysql:

use test;
create table tisam (c1 int auto_increment primary key, c2 char(100));
exit;

2. Make tisam.MYI empty (zero length) file.

3. Run:

mysqlcheck -uroot -p -r -B test

You will see that there will be now output for tisam table.

4. Connect using mysql command line client and try to repair using REPAIR. It will work
(with USE_FRM option, at least).
[3 Mar 2007 1:02] jocelyn fournier
.
[3 Mar 2007 7:05] Sergei Golubchik
Jocelyn has a patch: http://lists.mysql.com/internals/34356
[7 Mar 2007 18:04] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/21383

ChangeSet@1.2421, 2007-03-07 11:40:04-05:00, cmiller@zippy.cornsilk.net +4 -0
  Patch contributed by Jocelyn Fournier.  CLA received 2007-02-27.
  
  Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
  
  mysqlcheck tests nullness of the engine type to know whether the
  "table" is a view or not.  That also falsely catches tables that 
  are severly damaged.
  
  Instead, use SHOW CREATE VIEW to test whether a "table" is a view
  or not.
[7 Mar 2007 19:36] Jim Winstead
This patch is the wrong approach -- instead, process_all_tables_in_db() should use 'SHOW
/*!50002 FULL*/ TABLES' and use the second column (if there is one) to decide if tables
are views or not.
[7 Mar 2007 21:10] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/21422

ChangeSet@1.2421, 2007-03-07 15:13:24-05:00, cmiller@zippy.cornsilk.net +4 -0
  Patch contributed by Jocelyn Fournier.  CLA received 2007-02-27.
  
  Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
  
  mysqlcheck tests nullness of the engine type to know whether the
  "table" is a view or not.  That also falsely catches tables that 
  are severly damaged.
  
  Instead, use SHOW FULL TABLES to test whether a "table" is a view
  or not.
  
  (Don't add new function.  Instead, get original data a smarter way.)
  ---
  Make it safe for use against databases before when views appeared.
[16 Apr 2007 21:00] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/24614

ChangeSet@1.2509, 2007-04-16 15:00:16-04:00, cmiller@zippy.cornsilk.net +2 -0
  Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
  
  Additional changes to test:  "flush tables" so that Windows releases
  the files.
[23 Jan 2008 17:37] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/41159

ChangeSet@1.2563, 2008-01-23 11:37:46-05:00, cmiller@zippy.cornsilk.net +3 -0
  Patch contributed by Jocelyn Fournier.  CLA received 2007-02-27.
  
  Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
  
  mysqlcheck tests nullness of the engine type to know whether the
  "table" is a view or not.  That also falsely catches tables that 
  are severly damaged.
  
  Instead, use SHOW FULL TABLES to test whether a "table" is a view
  or not.
  
  (Don't add new function.  Instead, get original data a smarter way.)
  
  Make it safe for use against databases before when views appeared.
[26 Jan 2008 0:00] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/41272

ChangeSet@1.2566, 2008-01-25 16:00:15-07:00, tsmith@ramayana.hindu.god +1 -0
  Un-break test case on Windows, for bug #25347
[27 Jan 2008 22:29] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/41289

ChangeSet@1.2567, 2008-01-27 14:28:50-07:00, tsmith@ramayana.hindu.god +2 -0
  Fix test case for Bug #25347 so that it actually tests the code fix,
  and so that it works correctly on Windows.
[28 Jan 2008 7:40] Bugs System
Pushed into 6.0.5-alpha
[28 Jan 2008 7:51] Bugs System
Pushed into 5.1.24-rc
[28 Jan 2008 7:51] Bugs System
Pushed into 5.0.56
[28 Jan 2008 18:19] Paul DuBois
Noted in 5.0.56, 5.1.24, 6.0.5 changelogs.

mysqlcheck -A -r did not correctly identify all tables that needed
repairing.
[6 Mar 2008 6:40] Jon Stephens
Also documented for 5.1.23-ndb-6.2.14.
[30 Mar 2008 1:25] Jon Stephens
Also documented for 5.1.23-ndb-6.3.11.
[6 May 22:23] Bugs System
Pushed into 5.0.82 (revid:chad@mysql.com-20090506130632-s1cl4ygdj9rt2rrz) (version source
revid:chad@mysql.com-20090506130632-s1cl4ygdj9rt2rrz) (merge vers: 5.0.82) (pib:6)