http://qs321.pair.com?node_id=724054


in reply to Read a mysql .MYD file without a working .MYI file?

Have you looked at the MySQL documentation on the REPAIR TABLE syntax?

Replies are listed 'Best First'.
Re^2: Read a mysql .MYD file without a working .MYI file?
by japhy (Canon) on Nov 17, 2008 at 14:51 UTC
    I looked at the docs, yes, and I've tried various repairs. There are numerous errors about bad links going outside the data file (these occur as the .MYD file is being regenerated). The killer errors come up during the rebuilding of the index:
    | itrade_new.offers | repair | info | Found link that points at 82 +43107105727870068 (outside data file) at 42211469888 | | itrade_new.offers | repair | info | Found link that points at 82 +43107105727870068 (outside data file) at 42211469944 | | itrade_new.offers | repair | info | Found link that points at 82 +43107105727870068 (outside data file) at 42211470004 | | itrade_new.offers | repair | info | Found link that points at 44 +71241038974708841 (outside data file) at 42211470120 | | itrade_new.offers | repair | info | Found link that points at 44 +71296179294533182 (outside data file) at 42211470284 | | itrade_new.offers | repair | info | Found link that points at 83 +67816172579929378 (outside data file) at 42211470300 | | itrade_new.offers | repair | info | Found link that points at 33 +42363012281692769 (outside data file) at 42211470900 | | itrade_new.offers | repair | info | Found link that points at 44 +71433271728779990 (outside data file) at 42211470952 | | itrade_new.offers | repair | info | Found link that points at 73 +7591309940387956 (outside data file) at 42211471032 | | itrade_new.offers | repair | info | Found link that points at 44 +71296179294533182 (outside data file) at 42211471756 | | itrade_new.offers | repair | info | Found link that points at 10 +612976429166 (outside data file) at 42211471860 | | itrade_new.offers | repair | info | Found link that points at 78 +10403350942084128 (outside data file) at 42211471872 | | itrade_new.offers | repair | info | Found link that points at 71 +64208255722136163 (outside data file) at 42211472196 | | itrade_new.offers | repair | info | Found link that points at 82 +43107105727870068 (outside data file) at 42211472360 | | itrade_new.offers | repair | error | sort_buffer_size is to small + | | itrade_new.offers | repair | error | Can't copy datafile-header t +o tempfile, error 9 | | itrade_new.offers | repair | status | Operation failed
    That "sort_buffer_size" error comes up even when I set that value to 4G (the max value permitted). I haven't found much helpful information concerning "Can't copy datafile-header to tempfile, error 9".

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    Nos autem praedicamus Christum crucifixum (1 Cor. 1:23) - The Cross Reference (My Blog)
      Have you run fsck to make sure your filesystem isn't hosed? Never hurts to be paranoid.
        Good idea, I suppose. Can I do that while the system is being used, though? This box holds some other databases, including the temporary table set up while this particular table is giving me woe.

        Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
        Nos autem praedicamus Christum crucifixum (1 Cor. 1:23) - The Cross Reference (My Blog)

      REPAIR TABLE rebuilds the entire table and index, so you'll need to have enough diskspace. The error 9 is probably mysql running out of space during the rebuild. You won't notice it after because it discards the temp files.

      You'll need table size + index size + extra to do a full repair. Also, because mysql doesn't run as root, you won't have your entire disk available for the repair (if you're running Linux on ext2 or ext3) because of the reserved blocks. Check tune2fs's manpage for more info on those...

      I've worked with 80Gb+ tables more then I care for, and have run into this sort of issue way too often...

        Oh, I have the space. I also made a copy of the temporary file (.TMD or whatever). But actually, good news: I repaired it from the command-line using myisamchk --safe-repair and it worked.

        Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
        Nos autem praedicamus Christum crucifixum (1 Cor. 1:23) - The Cross Reference (My Blog)