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>,
},
}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.
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 subcommandAuto Trait Implementations§
impl Freeze for Commands
impl RefUnwindSafe for Commands
impl Send for Commands
impl Sync for Commands
impl Unpin for Commands
impl UnwindSafe for Commands
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.