pub enum Commands {
Parse {
file: String,
page: Option<u64>,
verbose: bool,
no_empty: bool,
json: bool,
page_size: Option<u32>,
},
Pages {
file: String,
page: Option<u64>,
verbose: bool,
show_empty: bool,
list: bool,
filter_type: Option<String>,
json: bool,
page_size: Option<u32>,
},
Dump {
file: String,
page: Option<u64>,
offset: Option<u64>,
length: Option<usize>,
raw: bool,
page_size: Option<u32>,
},
Corrupt {
file: String,
page: Option<u64>,
bytes: usize,
header: bool,
records: bool,
offset: Option<u64>,
verify: bool,
json: bool,
page_size: Option<u32>,
},
Find {
datadir: String,
page: u64,
checksum: Option<u32>,
space_id: Option<u32>,
first: bool,
json: bool,
page_size: Option<u32>,
},
Tsid {
datadir: String,
list: bool,
tablespace_id: Option<u32>,
json: bool,
page_size: Option<u32>,
},
Sdi {
file: String,
pretty: bool,
page_size: Option<u32>,
},
Log {
file: String,
blocks: Option<u64>,
no_empty: bool,
verbose: bool,
json: bool,
},
Info {
ibdata: bool,
lsn_check: bool,
datadir: Option<String>,
database: Option<String>,
table: Option<String>,
host: Option<String>,
port: Option<u16>,
user: Option<String>,
password: Option<String>,
defaults_file: Option<String>,
json: bool,
page_size: Option<u32>,
},
Recover {
file: String,
page: Option<u64>,
verbose: bool,
json: bool,
force: bool,
page_size: Option<u32>,
},
Checksum {
file: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
},
Diff {
file1: String,
file2: String,
verbose: bool,
byte_ranges: bool,
page: Option<u64>,
json: bool,
page_size: Option<u32>,
},
}Expand description
Available subcommands for the inno CLI.
Variants§
Parse
Parse .ibd file and display page summary
Reads the 38-byte FIL header of every page in a tablespace, decodes the
page type, checksum, LSN, prev/next pointers, and space ID, then prints
a per-page breakdown followed by a page-type frequency summary table.
Page 0 additionally shows the FSP header (space ID, size, flags).
Use --no-empty to skip zero-checksum allocated pages, or -p to
inspect a single page in detail. With --verbose, checksum validation
and LSN consistency results are included for each page.
Fields
Pages
Detailed page structure analysis
Goes beyond FIL headers to decode the internal structure of each page
type: INDEX pages show the B+Tree index header, FSEG inode pointers, and
infimum/supremum system records; UNDO pages show the undo page header
and segment state; BLOB/LOB pages show chain pointers and data lengths;
and page 0 shows extended FSP header fields including compression and
encryption flags. Use -l for a compact one-line-per-page listing,
-t INDEX to filter by page type, or -p for a single page deep dive.
Fields
Dump
Hex dump of raw page bytes
Operates in two modes: page mode (default) reads a full page by
number and produces a formatted hex dump with file-relative offsets;
offset mode (--offset) reads bytes at an arbitrary file position,
useful for inspecting structures that cross page boundaries. Use
--length to limit the number of bytes shown, or --raw to emit
unformatted binary bytes suitable for piping to other tools.
Fields
Corrupt
Intentionally corrupt pages for testing
Writes random bytes into a tablespace file to simulate data corruption.
Targets can be the FIL header (-k), the record data area (-r), or
an absolute byte offset (--offset). If no page is specified, one is
chosen at random. Use --verify to print before/after checksum
comparisons confirming the page is now invalid — useful for verifying
that inno checksum correctly detects the damage.
Fields
Find
Search for pages across data directory
Recursively discovers all .ibd files under a MySQL data directory,
opens each as a tablespace, and reads the FIL header of every page
looking for a matching page_number field. Optional --checksum and
--space-id filters narrow results when the same page number appears
in multiple tablespaces. Use --first to stop after the first match
for faster lookups.
Fields
Tsid
List/find tablespace IDs
Scans .ibd and .ibu files under a MySQL data directory and reads
the space ID from the FSP header (page 0, offset 38) of each file.
In list mode (-l) it prints every file and its space ID; in
lookup mode (-t <id>) it finds the file that owns a specific
tablespace ID. Useful for mapping a space ID seen in error logs or
INFORMATION_SCHEMA back to a physical file on disk.
Fields
Sdi
Extract SDI metadata (MySQL 8.0+)
Locates SDI (Serialized Dictionary Information) pages in a tablespace
by scanning for page type 17853, then reassembles multi-page SDI
records by following the page chain. The zlib-compressed payload is
decompressed and printed as JSON. Each tablespace in MySQL 8.0+
embeds its own table/column/index definitions as SDI records,
eliminating the need for the .frm files used in older versions.
Use --pretty for indented JSON output.
Fields
Log
Analyze InnoDB redo log files
Opens an InnoDB redo log file (ib_logfile0/ib_logfile1 for
MySQL < 8.0.30, or #ib_redo* files for 8.0.30+) and displays
the log file header, both checkpoint records, and per-block details
including block number, data length, checkpoint number, and CRC-32C
checksum status. With --verbose, MLOG record types within each
data block are decoded and summarized. Use --blocks N to limit
output to the first N data blocks, or --no-empty to skip blocks
that contain no redo data.
Fields
Info
Show InnoDB file and system information
Operates in three modes. --ibdata reads the ibdata1 page 0
FIL header and redo log checkpoint LSNs. --lsn-check compares
the ibdata1 header LSN with the latest redo log checkpoint LSN to
detect whether the system tablespace and redo log are in sync (useful
for diagnosing crash-recovery state). -D/-t queries a live
MySQL instance via INFORMATION_SCHEMA.INNODB_TABLES and
INNODB_INDEXES for tablespace IDs, table IDs, index root pages,
and key InnoDB status metrics (requires the mysql feature).
Fields
Recover
Recover data from corrupt/damaged tablespace files
Scans a tablespace file and classifies each page as intact, corrupt, empty, or unreadable. For INDEX pages, counts recoverable user records by walking the compact record chain. Produces a recovery assessment showing how many pages and records can be salvaged.
Use --force to also extract records from pages with bad checksums
but valid-looking headers — useful when data is partially damaged
but the record chain is still intact. Use --page-size to override
page size detection when page 0 is corrupt.
With --verbose, per-page details are shown including page type,
status, LSN, and record count. With --json, a structured report
is emitted including optional per-record detail when combined with
--verbose.
Fields
Checksum
Validate page checksums
Reads every page in a tablespace and validates its stored checksum
against both CRC-32C (MySQL 5.7.7+) and legacy InnoDB algorithms.
Also checks that the header LSN low-32 bits match the FIL trailer.
All-zero pages are counted as empty and skipped. With --verbose,
per-page results are printed including the detected algorithm and
stored vs. calculated values. Exits with code 1 if any page has an
invalid checksum, making it suitable for use in scripts and CI.
Fields
Diff
Compare two tablespace files page-by-page
Reads two InnoDB tablespace files and compares them page-by-page,
reporting which pages are identical, modified, or only present in
one file. With --verbose, per-page FIL header field diffs are
shown for modified pages, highlighting changes to checksums, LSNs,
page types, and space IDs. Add --byte-ranges (with -v) to see
the exact byte offsets where page content differs. Use -p to
compare a single page, or --json for machine-readable output.
When files have different page sizes, only FIL headers (first 38 bytes) are compared and a warning is displayed.
Fields
Trait Implementations§
Source§impl FromArgMatches for Commands
impl FromArgMatches for Commands
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut<'b>(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl Subcommand for Commands
impl Subcommand for Commands
Source§fn augment_subcommands<'b>(__clap_app: Command) -> Command
fn augment_subcommands<'b>(__clap_app: Command) -> Command
Source§fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§fn has_subcommand(__clap_name: &str) -> bool
fn has_subcommand(__clap_name: &str) -> bool
Self can parse a specific subcommand