Description:
Running MySQL Distrib 3.23.54 on i32. This is where I see the error:
E:\mysql\data\test>myisamchk -O key_buffer=512M -O sort_buffer=512M -O read_buffer=64M -O write_buffer=64M -r -S -a rsecpossqs
- recovering (with keycache) MyISAM-table 'rsecpossqs.MYI'
Data records: 54822847
myisamchk: warning: Can't change size of indexfile, error: 22
myisamchk: error: 22 for record at pos 4294967232
MyISAM-table 'rsecpossqs' is not fixed because of errors
Try fixing it by using the --safe-recover (-o) or the --force (-f) option
And this is about 4 hours after starting the command; right after myisamchk runs through counting up the rows.
The table is the standard size, no adjustments have been made to the AVG_ROW_LENGTH and MAX_ROWS yet. File sizes are:
4,294,967,268 rsecpossqs.MYD
4,383,221,760 rsecpossqs.MYI
at the moment. Should be cut in half after the optimize because of deletes. Will be looking at merge tables later, but I need this working in the mean-time.
Output from myisamchk -dv rsecpossqs.myi
--------------------------------------------------------------------------------
MyISAM file: rsecpossqs.myi
Record format: Packed
Character set: latin1 (8)
File-version: 1
Creation time: 2002-10-18 22:39:44
Recover time: 2002-10-19 23:38:27
Status: changed
Data records: 54822847 Deleted blocks: 40358029
Datafile parts: 95419877 Deleted data: 1772432408
Datafile pointer (bytes): 4 Keyfile pointer (bytes): 4
Datafile length: 4294967268 Keyfile length: 4383221760
Max datafile length: 4294967294 Max keyfile length: 4398046510079
Recordlength: 101
table description:
Key Start Len Index Type Rec/key Root Blocksize
1 2 4 multip. long 0 1628417024 1024
2 99 3 multip. uint24 0 2517115904 1024
3 95 4 multip. long 0 2130399232 1024
4 31 64 multip. char packed stripped 0 1526540288 1024
5 14 16 multip. char packed stripped 0 1576935424 1024
--------------------------------------------------------------------------------
How to repeat:
Create a large table with indexes that will exceed the 4Gb size (32bit unsigned int). Run myisamchk -r -S -a against the table.
Suggested fix:
Patch config-win.h:
Line 232:
-#define HAVE_CHSIZE /* System has chsize() function */
+#undef HAVE_CHSIZE /* System has chsize() function but is only 32 bit*/