Search code examples
mysqldatabaseinnodbmyisamdatabase-engine

How I can find out if the engine of a MySQL database is MyISAM or InnoDB in file system?


How I can find out the MySQL database engine in the file system (data structure, no MySQL commands possible)?

It would be nice if you can help me.

Best regards, Jonniboy


Solution

  • MySQL ".frm" (table) files have a file signature and a defined header format.

    This format is briefly explained in 8 bits: MySQL File formats and headers:

    1. The first two bytes are always FE,01
    2. The 4th byte is the storage type: e.g. 0C for InnoDB, 09 for MyISAM, 14 for MyIASM w/ partitions. (See Bill Karwin's comment; these are extracted from the legacy_db_type enum.)

    That should be all the information required to perform a cursory check - either with file (which may or may not need additional rules) or by manual inspection with something like xxd, e.g.

    sh$ xxd -l 4 table.frm
    

    Keep in mind that a single database may contain MyISAM and InnoDB tables.