pub enum Commands {
Show 24 variants
Parse {
file: String,
page: Option<u64>,
verbose: bool,
no_empty: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
streaming: bool,
},
Pages {
file: String,
page: Option<u64>,
verbose: bool,
show_empty: bool,
list: bool,
filter_type: Option<String>,
deleted: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Dump {
file: String,
page: Option<u64>,
offset: Option<u64>,
length: Option<usize>,
raw: bool,
page_size: Option<u32>,
keyring: Option<String>,
decrypt: bool,
},
Corrupt {
file: String,
page: Option<u64>,
bytes: usize,
header: bool,
records: bool,
offset: Option<u64>,
verify: bool,
json: bool,
page_size: Option<u32>,
},
Export {
file: String,
page: Option<u64>,
format: String,
where_delete_mark: bool,
system_columns: bool,
verbose: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Find {
datadir: String,
page: Option<u64>,
checksum: Option<u32>,
space_id: Option<u32>,
corrupt: bool,
first: bool,
json: bool,
page_size: Option<u32>,
depth: Option<u32>,
},
Tsid {
datadir: String,
list: bool,
tablespace_id: Option<u32>,
json: bool,
page_size: Option<u32>,
depth: Option<u32>,
},
Sdi {
file: String,
pretty: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Schema {
file: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Log {
file: String,
blocks: Option<u64>,
no_empty: bool,
verbose: bool,
json: bool,
},
Info {Show 13 fields
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>,
tablespace_map: bool,
json: bool,
page_size: Option<u32>,
},
Recover {
file: String,
page: Option<u64>,
verbose: bool,
json: bool,
force: bool,
page_size: Option<u32>,
keyring: Option<String>,
streaming: bool,
rebuild: Option<String>,
},
Checksum {
file: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
streaming: bool,
},
Watch {
file: String,
interval: u64,
verbose: bool,
json: bool,
events: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Repair {
file: Option<String>,
batch: Option<String>,
page: Option<u64>,
algorithm: String,
no_backup: bool,
dry_run: bool,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Diff {
file1: String,
file2: String,
verbose: bool,
byte_ranges: bool,
page: Option<u64>,
version_aware: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Transplant {
donor: String,
target: String,
pages: Vec<u64>,
no_backup: bool,
force: bool,
dry_run: bool,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Health {
file: String,
verbose: bool,
json: bool,
prometheus: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Audit {
datadir: String,
health: bool,
checksum_mismatch: bool,
verbose: bool,
json: bool,
prometheus: bool,
page_size: Option<u32>,
keyring: Option<String>,
min_fill_factor: Option<f64>,
max_fragmentation: Option<f64>,
depth: Option<u32>,
},
Compat {
file: Option<String>,
scan: Option<String>,
target: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
depth: Option<u32>,
},
Defrag {
file: String,
output: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
},
Validate {
datadir: String,
database: Option<String>,
table: Option<String>,
host: Option<String>,
port: Option<u16>,
user: Option<String>,
password: Option<String>,
defaults_file: Option<String>,
verbose: bool,
json: bool,
page_size: Option<u32>,
depth: Option<u32>,
},
Verify {
file: String,
verbose: bool,
json: bool,
page_size: Option<u32>,
keyring: Option<String>,
redo: Option<String>,
chain: Vec<String>,
},
Completions {
shell: Shell,
},
}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
Export
Export record-level data from a tablespace
Extracts user records from clustered index leaf pages and outputs them as CSV, JSON, or raw hex. Uses SDI metadata (MySQL 8.0+) to decode field types and column names. Without SDI, falls back to hex-only output.
Supported types: integers (TINYINT–BIGINT), FLOAT, DOUBLE, DATE, DATETIME, TIMESTAMP, YEAR, VARCHAR, CHAR. Unsupported types (DECIMAL, BLOB, JSON, etc.) are exported as hex strings.
Use --where-delete-mark to include only delete-marked records
(useful for forensic recovery). Use --system-columns to include
DB_TRX_ID and DB_ROLL_PTR in the output.
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.
With --corrupt, scans all pages for checksum mismatches instead of
searching by page number. Reports corrupt pages with their stored and
calculated checksums plus corruption pattern classification.
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
Schema
Extract schema and reconstruct DDL from tablespace metadata
Reads SDI (Serialized Dictionary Information) from MySQL 8.0+
tablespaces, parses the embedded data dictionary JSON into typed
column, index, and foreign key definitions, and reconstructs a
complete CREATE TABLE DDL statement. For pre-8.0 tablespaces
that lack SDI, scans INDEX pages to infer basic index structure
and record format (compact vs. redundant).
Use --verbose for a structured breakdown of columns, indexes,
and foreign keys above the DDL. Use --json for machine-readable
output including the full schema definition and DDL as a JSON object.
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
Watch
Monitor a tablespace file for page-level changes
Polls an InnoDB tablespace file at a configurable interval and reports which pages have been modified, added, or removed since the last poll. Change detection is based on LSN comparison — if a page’s LSN changes between polls, it was modified by a write. Checksums are validated for each changed page to detect corruption during writes.
The tablespace is re-opened each cycle to detect file growth and avoid
stale file handles. Use --verbose for per-field diffs on changed
pages, or --json for NDJSON streaming output (one JSON object per
line). Press Ctrl+C for a clean exit with a summary of total changes.
Fields
Repair
Repair corrupt page checksums
Recalculates and writes correct checksums for pages with invalid checksums
or LSN mismatches. By default, auto-detects the checksum algorithm from
page 0 and creates a .bak backup before modifying the file. Use
--algorithm to force a specific algorithm, --dry-run to preview
repairs without modifying the file, or --no-backup to skip the backup.
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
Transplant
Copy specific pages from a donor tablespace into a target
Reads pages from the donor file and writes them into the target file at
the same page number. Safety checks ensure page sizes and space IDs
match. Page 0 (FSP_HDR) is rejected unless --force is used. Donor
pages with invalid checksums are skipped unless --force is used.
A backup of the target is created by default. Use --dry-run to preview
which pages would be transplanted without modifying the target.
Fields
Health
Per-index B+Tree health metrics
Scans all INDEX pages in a tablespace and computes per-index health metrics including fill factor (average, min, max), garbage ratio, fragmentation, tree depth, and page counts. Optionally resolves index names from SDI metadata (MySQL 8.0+).
Use --verbose for additional detail including total records and
empty leaf page counts. Use --json for machine-readable output.
Fields
Audit
Audit a MySQL data directory for integrity, health, or corruption
Scans all .ibd files under a data directory and validates checksums,
computes health metrics, or lists corrupt pages — replacing the need
to run inno checksum or inno health file-by-file. Three modes:
Default (integrity): validates checksums across all tablespace files and reports per-file pass/fail with a directory-wide integrity percentage.
--health: computes per-tablespace fill factor, fragmentation, and
garbage ratio, ranked worst-first. Use --min-fill-factor and
--max-fragmentation to filter for unhealthy tablespaces only.
--checksum-mismatch: compact listing of only corrupt pages with
stored vs. calculated checksums, suitable for piping to inno repair.
--health and --checksum-mismatch are mutually exclusive.
Fields
min_fill_factor: Option<f64>Show tables with fill factor below this threshold (0-100, –health only)
Compat
Check tablespace compatibility with a target MySQL version
Analyzes tablespace files to determine whether they are compatible with a target MySQL version. Checks include page size support, row format, encryption, compression, SDI presence, and vendor compatibility (MariaDB tablespaces are flagged as incompatible).
Single-file mode (--file): checks one tablespace and reports
all compatibility findings with severity levels (info/warning/error).
Directory scan mode (--scan): discovers all .ibd files under
a data directory, runs compatibility checks on each in parallel, and
produces a per-file summary plus an overall compatible/incompatible
count.
--file and --scan are mutually exclusive.
Fields
Defrag
Defragment a tablespace by reclaiming free space and reordering pages
Reads all pages from a source tablespace, removes empty and corrupt pages, sorts INDEX pages by (index_id, level, page_number), fixes prev/next chain pointers within each index group, renumbers pages sequentially, rebuilds page 0, recalculates all checksums, and writes the result to a new output file. The source file is never modified.
Fields
Validate
Cross-validate tablespace files against live MySQL metadata
Scans a data directory for .ibd files and compares their space IDs against MySQL’s INFORMATION_SCHEMA.INNODB_TABLESPACES. Detects orphan files (on disk but not in MySQL), missing tablespaces (in MySQL but not on disk), and space ID mismatches. Requires –host and –user for MySQL connection (mysql feature must be compiled).
Fields
Verify
Verify structural integrity of a tablespace
Runs pure structural checks on a tablespace file without requiring valid checksums. Checks page number sequence, space ID consistency, LSN monotonicity, B+Tree level validity, page chain bounds, and trailer LSN matching. Exits with code 1 if any check fails.
Fields
Completions
Generate shell completion scripts
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 UnsafeUnpin 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<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more