Skip to content

Releases: ringo380/idb-utils

v5.1.0

25 Mar 06:51

Choose a tag to compare

What's Changed

  • feat: add crash recovery simulation (Epic #145) by @ringo380 in #196
  • feat: add incremental backup analysis (Epic #146) by @ringo380 in #197
  • feat: add index bloat scoring and cardinality estimation (Epic #147) by @ringo380 in #198
  • feat: complete v5.1 milestone — verify backup-meta, audit bloat alerts, docs by @ringo380 in #199

Full Changelog: v5.0.0...v5.1.0

v5.0.0

21 Mar 00:05

Choose a tag to compare

What's Changed

  • feat: v5.0 deep InnoDB internals — undo, LOB, binlog, spatial/FTS, ZSTD by @ringo380 in #184
  • feat: add record undelete for recovering deleted InnoDB records by @ringo380 in #185
  • Add GA4 analytics tracking to web UI by @ringo380 in #192
  • feat: complete v5.0 milestone by @ringo380 in #195

Full Changelog: v4.0.2...v5.0.0

v4.0.2

02 Mar 06:15

Choose a tag to compare

What's Changed

Full Changelog: v4.0.1...v4.0.2

v4.0.1

27 Feb 22:53

Choose a tag to compare

What's Changed

Full Changelog: v4.0.0...v4.0.1

v4.0.0

26 Feb 03:46

Choose a tag to compare

What's Changed

  • Add upgrade validation, backup verification, and live MySQL cross-validation (v4.0) by @ringo380 in #119

Full Changelog: v3.2.0...v4.0.0

What's Changed

  • Add upgrade validation, backup verification, and live MySQL cross-validation (v4.0) by @ringo380 in #119

Full Changelog: v3.2.0...v4.0.0

What's Changed

  • Add upgrade validation, backup verification, and live MySQL cross-validation (v4.0) by @ringo380 in #119

Full Changelog: v3.2.0...v4.0.0

v3.2.0

25 Feb 23:59

Choose a tag to compare

Added

  • inno audit subcommand — New subcommand for directory-wide integrity scanning, health metrics, and checksum mismatch detection. Three modes: default integrity (inno audit -d <datadir>), health (--health), and mismatch listing (--checksum-mismatch). Scans .ibd files in parallel with rayon. Supports --json, --csv, and --prometheus output formats, threshold filters (--min-fill-factor, --max-fragmentation), and --keyring for encrypted tablespaces.
  • --audit-log <path> global flag — Structured NDJSON audit logging for write operations (repair, corrupt, defrag, transplant). AuditLogger with mutex + fs2 file locking, AuditEvent tagged enum (session_start, page_write, file_write, backup_created, session_end).
  • --prometheus flag on inno audit and inno health — Prometheus exposition format output for integration with textfile collectors. Per-file and directory-wide gauge metrics for pages, corruption, fill factor, fragmentation, garbage ratio, and scan duration.
  • inno watch --events — Structured NDJSON change event stream. Emits watch_start, page_change, watch_error, and watch_stop events with per-page detail (page type, LSN delta, checksum validity).
  • inno repair --batch <dir> — Batch repair mode scanning a data directory for corrupt tablespaces and repairing them in parallel. Auto-detects checksum algorithm per file. BatchRepairReport JSON output with per-file results and summary.
  • inno find --corrupt — Scan data directory for pages with checksum mismatches.
  • --depth flag on inno find, inno tsid, and inno audit — Control recursive directory scanning depth. Default depth 2, --depth 0 for unlimited, --depth N for N levels. Symlink loop detection via canonical path tracking.
  • Shell completion generationinno completions <shell> generates completions for bash, zsh, fish, and PowerShell via clap_complete.
  • Web UI audit dashboard — New "Audit" tab in the web analyzer for multi-file integrity and health analysis. Drop 3+ .ibd files to see summary cards (total files, pages, corrupt pages, integrity %, avg fill factor), progress bars for integrity and fragmentation, and a sortable/filterable per-file detail table.
  • WASM analyze_health() binding — New wasm-bindgen export for B+Tree health analysis from in-memory tablespace bytes.
  • New src/util/prometheus.rs module with Prometheus exposition format helpers
  • New src/util/audit.rs module with AuditLogger and AuditEvent types
  • New web/src/components/audit.js audit dashboard component
  • 30+ new integration tests across audit, find, health, and watch test files

Changed

  • find_tablespace_files() rewritten with configurable depth and symlink loop safety via HashSet<PathBuf> canonical path tracking
  • Web UI dropzone extended for 3+ file multi-drop (audit mode)
  • Web UI tab bar conditionally shows Audit tab (keyboard shortcut: 0)

Full Changelog: v3.1.0...v3.2.0

v3.1.0

23 Feb 06:58

Choose a tag to compare

What's Changed

Full Changelog: v3.0.0...v3.1.0

v3.0.0

21 Feb 02:39

Choose a tag to compare

Full Changelog: v2.1.0...v3.0.0

v2.1.0

20 Feb 23:32

Choose a tag to compare

Added

  • Redo log analysis in web UI — New "Redo Log" tab auto-detects redo log files (ib_logfile*, #ib_redo*) and displays file header, checkpoint slots, block-level analysis with filtering, and MLOG record type distribution. Uses the existing parse_redo_log WASM function. (Closes #21)
  • Export functionality — Download JSON and Copy to Clipboard buttons on every analysis tab. "Export All" button in the analyzer header runs all analysis functions and downloads a combined JSON file. Shared utilities in web/src/utils/export.js. (Closes #31)
  • Page type heatmap — New "Heatmap" tab renders a canvas-based grid visualization of all pages, color-coded by page type. Three color modes: Page Type (categorical), LSN Age (blue-to-red gradient), and Checksum Status (green/red/gray). Supports mouse wheel zoom, click-and-drag pan, hover tooltips, and click-to-inspect navigation to the Pages tab. (Closes #25)
  • Record-level INDEX page inspection — "View Records" button on INDEX pages in the Pages tab. Displays individual B+Tree record headers (type, heap number, n_owned, delete mark, min_rec, next offset) and raw hex bytes. Supports both compact (MySQL 5.0+) and redundant (pre-5.0) row formats. New inspect_index_records WASM function. (Closes #23)
  • Encrypted tablespace support in web UI — Automatic encryption detection with keyring file upload banner. New decrypt_tablespace and get_encryption_info WASM functions. Decrypted data is transparently passed to all analysis tabs. (Closes #29)
  • Redundant row format parsing — New RedundantRecordHeader struct and walk_redundant_records() function in innodb::record for pre-MySQL 5.0 row format support. Parses 6-byte headers with n_fields, one_byte_offs flag, and absolute next-record offsets.
  • Accessibility improvements — ARIA role="tablist"/role="tab" attributes with arrow key navigation, scope="col" on all table headers, skip-to-content link, keyboard shortcuts panel (? key), aria-live announcements for tab changes, focus-visible outlines, reduced-motion and high-contrast media queries, visible theme toggle button. (Closes #32)
  • MySQL 9.0/9.1 test fixtures and integration tests (compressed, multipage, standard, redo logs)
  • Percona Server 8.0/8.4 test fixtures and integration tests
  • MySQL 9.x redo log format support (version-conditional parsing for pre/post-8.0.30 layouts)
  • Memory-mapped I/O (--mmap flag) for large tablespace analysis
  • Streaming analysis mode (--streaming flag) for memory-constrained environments
  • Criterion benchmarking infrastructure for core operations
  • Docker image with multi-arch support and GitHub Actions workflow
  • npm package for WASM module with TypeScript types
  • deb and rpm package generation in release workflow
  • AUR PKGBUILD for Arch Linux packaging
  • Reference Homebrew formula for homebrew-core submission
  • Git LFS tracking for binary test fixtures
  • LICENSE file (MIT)
  • 3 unit tests for redundant record header parsing and RecordHeader enum accessors

Changed

  • BREAKING: RecordInfo.header changed from CompactRecordHeader to RecordHeader enum (wrapping Compact or Redundant variants). Direct field access (e.g. rec.header.heap_no) must be replaced with accessor methods (e.g. rec.header.heap_no()). This enables unified handling of both compact and redundant row formats.
  • PageType::Unknown now carries original type code as Unknown(u16), preserving unrecognized page type values
  • Benchmarks use iter_batched instead of cloning data inside b.iter() for accurate timing
  • Web UI tab bar now includes Heatmap (key 7) and conditionally shows Diff (key 8) and Redo Log (key 9)
  • Diff view grid is now responsive (grid-cols-1 md:grid-cols-2)
  • Keyboard shortcuts no longer fire when a <select> element has focus

Fixed

  • XSS in heatmap tooltip — numeric values (page_number, lsn) are now escaped with esc()
  • Memory leak in heatmap — mouseup listener scoped to canvas instead of window, with mouseleave cleanup
  • recover now threads vendor_info to validate_checksum(), fixing MariaDB full_crc32 recovery assessment
  • Bounds checks in checksum and parse parallel paths prevent out-of-bounds access on truncated files
  • find --first files_searched counter correctly counts all opened files from parallel results
  • Progress bars in checksum, parse, and find display during parallel work instead of after
  • Corrected PageType enum values and added missing page types
  • LogFileHeader::parse() version-conditional layout for pre-8.0.30 redo logs
  • CI test job fetches Git LFS objects for binary fixture files

Dependencies

  • rand 0.9.2 → 0.10.0
  • colored 2.2.0 → 3.1.1
  • indicatif 0.18.3 → 0.18.4
  • lz4_flex 0.11.5 → 0.12.0
  • ctrlc 3.5.1 → 3.5.2
  • actions/checkout v4 → v6, actions/setup-node v4 → v6
  • actions/upload-artifact v4 → v6, actions/download-artifact v4 → v7
  • actions/upload-pages-artifact v3 → v4, peter-evans/repository-dispatch v3 → v4

Full Changelog: v2.0.0...v2.1.0

v2.0.0

15 Feb 01:36
a2c0995

Choose a tag to compare

What's Changed

  • Add WASM build target and web-based InnoDB analyzer by @ringo380 in #19

New Contributors

Full Changelog: v1.4.0...v2.0.0