# myflames 3.3.1 (2026-10-31)

myflames 3.3.1 is available for macOS on Apple Silicon and, as an unsigned preview, for Windows x64.

## Release highlights

- Schema versions saves database definitions, compares them across servers and writes the script that makes one match the other, with warnings for changes that drop data or rebuild a table.
- Connections can go through an SSH tunnel.
- Query digest reads slow query logs and filters any source by time range.
- MySQL 5.7 works across the Server views, the Query editor and Users and roles.

## New features

- Adds **Schema versions**, which saves database definitions on this computer and compares two saved versions or live databases, also across servers. Differences are shown side by side, and **Sync script** writes the SQL that changes the **Target** to match the **Source**, ready to copy, download or open in the Query editor.
- Adds **Include in sync script**, to choose which objects a schema comparison changes. Objects that exist only in the target start unselected.
- Adds schema change warnings: **Drops data**, **May fail** and **Rebuilds table**, repeated as comments in the sync script. For `ALTER TABLE`, myflames predicts the algorithm and whether writes can continue during the change.
- Adds **Checks** for saved schemas, which look for risky column types, old character sets, reserved names, and foreign key and definer problems.
- Adds **Export as SQL** to Schema versions, to recreate a schema on another server. Tables and views come in dependency order, with routines, triggers and events, and definers are left out by default.
- Adds **Compare** to Parameters and to Users and roles, to see what differs between two servers. Parameters can also compare saved snapshots (**Save snapshot…**). Password hashes and secret parameter values are left out.
- Adds **Export grants as SQL** for selected accounts and the roles they need: `CREATE USER IF NOT EXISTS` without passwords, then the grants and default roles.
- Adds **Parameters > Versions**, to compare system variables between MySQL and MariaDB releases and trace one parameter's history. It covers MySQL GA releases from 5.7.9 and stable MariaDB releases from 10.6. Percona Server uses the MySQL catalog, so Percona-only variables are not included.
- Adds **Import CSV…** for `.csv`, `.tsv` and `.txt` files, into an existing or a new table, with a preview that checks the rows first. It uses `INSERT` unless the server already allows `LOAD DATA LOCAL`, and you choose the transaction size and whether a bad row stops the import.
- Adds **Save query…** and a **Saved** tab next to History, with folders, notes and search. It keeps up to 500 queries on this computer, and opening one creates a tab without running it.
- Adds cell, range, row and column selection to query results, with totals of the selected numbers under the grid. `⌘C` (`Ctrl+C`) copies the selection as tab-separated text, and **Show row** shows a row's typed values and formatted JSON.
- Adds **Fill in the values of** for statements opened from Top statements or Query digest. It shows each placeholder in its SQL context and takes a number, text or NULL, including lists for `IN (...)`.
- Adds `ALTER TABLE` predictions to Query editor reviews, also used in the Tables and Indexes write reviews: the expected algorithm, whether the table is rebuilt and the effect on concurrent writes, for MySQL 8.4 and 9.x and MariaDB 10.11 to 13.0.
- Adds DDL progress to **Processlist** and the Query editor: the stage, percentage and estimated time left, when the server reports them. **Follow progress** keeps the session list refreshing.
- Adds **Connect through SSH**, which uses the system `ssh` with your SSH configuration, keys and agent. Queries, dumps, restores and upgrade checks all go through the tunnel, which closes when idle or when myflames quits. SSH password sign-in is not supported.
- Adds **Slow log table** and **Slow log file** sources to Query digest. They group MySQL, Percona Server and MariaDB slow log entries by statement, with timing, lock time and rows, and a local file can be read without a server connection.
- Adds **Time range** to Query digest, with a calendar and quick ranges. With Performance Schema it filters by when statements were seen, and their counters stay totals since collection began.
- Adds server-wide totals to Query digest, including the time and calls of statements outside the loaded list, and a **New** badge for recent statements. On MySQL the inspector adds latency percentiles and a histogram.
- Adds a **Tables** section to the Query digest inspector, with the engine, size and indexes of each table the statement names, and **Open in Indexes**.
- Adds live charts to Health for query rate, running threads, buffer pool disk reads and connections in use.
- Adds **Capture when…** to Health. While the view is open, it watches for too many running threads, long row lock waits or long-running statements, and saves the processlist, InnoDB status and locks as an investigation when one happens.
- Adds **Stats** to Plans, which ranks time by table or operator type and highlights the matching operators in the charts. **All occurrences** in the operator inspector lists every operator of the same kind with its measurements.
- Adds **Hide literal values** to Plans exports, on by default. Shared HTML and JSON replace literal values and comments with placeholders and keep names and measurements.
- Adds **Table structure** to **Server > Tables**: columns, indexes, foreign keys and the exact `SHOW CREATE TABLE`, which you can copy or download as a `.sql` file.
- Adds **Structure only (no rows)** to logical dumps in Maintenance.
- Adds guided steps, simplified code, **Check yourself** quizzes and **Explore** to all 23 Learn lessons. **Next step** moves one idea at a time, Play runs the rest, and **Full screen** scales the drawing to the display.
- Adds engine choices to Learn examples. Filesort can show MySQL or MariaDB behavior, including MariaDB's radix sort, and Buffer pool warmup explains how each engine picks the pages to load.

## Improvements

- **New connection…** is in the connection picker, and pasting a `host:port`, `[IPv6]:port` or `mysql://` URL fills in the form. **Test connection** fills the database list.
- The connection in use is shown as a colored strip while you work and as a band on every write review. Home and the Audit log show the connection type and Read-only separately.
- The Audit log shows readable status names, local times and a Copy button per statement, and records the SSH target of writes made through a tunnel.
- Database and object fields in the Server views and Maintenance forms offer lists read from the server. Restore can pick an existing or a new database, Clone can fill the donor from a saved connection, and Parameters shows checkboxes for settings such as `sql_mode`.
- Connection errors start with a plain explanation and what to check, followed by the client's own message.
- Query digest shows coverage notes and loaded totals, exports text and CSV, and uses the server's clock for statement times.
- Parameters keeps comparisons, snapshots and staged edits when you switch to another Server view, and fits narrow windows by showing the name, value, apply type and source first.
- Comparisons in Schema versions, Parameters and Users and roles share one **Source** and **Target** bar with **Swap** and **Change…**, and clearer difference badges.
- Learn opens with the drawing and its controls in view, with the query and explanation under **About this example**.
- Locks, Plans and the Query editor fit narrow windows better. Lock descriptions wrap, the plan chart takes more room when no operator is selected, and the editor shows one bottom panel at a time.
- Table lists keep **Columns** outside the horizontal scroll area, and **Filter tables** sits next to paging and export.
- In Settings, screen readers announce the explanations of **Restore workspace on startup** and **Show MySQL and MariaDB news on Home** together with their switches.

## Bug fixes

- Fixed an issue where MySQL 5.7 servers were rejected with a message asking for MySQL 8.4 or later. MySQL 5.7 works, and the features it lacks are explained in plain sentences. MySQL 5.7 is end of life and has been in Oracle Sustaining Support since October 25, 2023.
- Fixed an issue where Tables, Indexes and Parameters failed on MySQL 5.7. Locks and Replication also read 5.7 correctly, and parameter changes and tuning advice use settings that 5.7 accepts.
- Fixed an issue where privilege reads failed on MySQL 5.7, which broke Table data and account actions. Users and roles works from MySQL 5.7.6 and explains that 5.7 has no roles.
- Fixed an issue where **Run analysis** sent unsupported SQL to MySQL before 8.3 and showed a server error. On those versions the action is disabled with the reason. Use **Explain** instead.
- Fixed an issue where Database diagram did not make it clear how to load the selected database. **Load** names the action, and loading another database asks before replacing the diagram.
- Fixed an issue where a changed saved connection did not show in other connection lists until a reload. Duplicate names, including ones that differ only in case or spaces, are refused under the name field.
- Fixed an issue where spaces pasted around a host name caused an unknown-host error.
- Fixed an issue where Users and roles gave the wrong privilege advice for Drop and Rename on some versions.
- Fixed an issue where Query digest table and histogram reads stalled after you switched connections.
- Fixed an issue where hidden result columns were included in selections, totals, copied text and arrow-key movement.
- Fixed an issue where the parameter form changed values you had not edited.
- Fixed an issue where **Hide literal values** could not be used from the keyboard.
- Fixed an issue where the Query editor refused **Add column…** and **Remove column…** from Tables. They open the change for review.
- Fixed an issue where schema Checks needed MySQL 8.0.13 for reserved-word checks. They work from 8.0.11, and `QUALIFY` is treated as reserved from MySQL 8.3.0.
- Fixed an issue where the ALTER review offered `ALGORITHM=INPLACE, LOCK=NONE` for a change predicted to run instantly. On MySQL that rewrite can turn an instant column change into a table rebuild, so it is no longer offered.
- Fixed an issue where leaf rows in the execution tree had a blank total time.
- Fixed an issue where Visual Explain opened with text too small to read. Fit keeps text at 11 px or larger and starts at the plan's first inputs.
- Fixed several Learn lessons whose drawings or counters did not match their examples, among them the index lookup, join, Filesort, Buffer pool warmup, InnoDB LRU and Join order search lessons. Filesort no longer stops with a script error.

## Security fixes

- Connections through different SSH hosts are treated as different servers for saved passwords, write policy, editor sessions and schema history, and write reviews name the SSH target.
- `CLONE INSTANCE` is refused when either connection uses SSH, because the recipient must reach the donor directly. Remote file and backup checks treat tunneled connections as remote servers.

## Deprecations and removals

- Query digest no longer offers the **Slow queries over 1 s** ranking. Use the **Slow log table** or **Slow log file** source instead.

## Additional resources

- Download the latest myflames from [myflames.io](https://myflames.io/download.html), or this version from [GitHub](https://github.com/vgrippa/myflames/releases/tag/v3.3.1)
- New to myflames? Start with the [Quickstart](https://myflames.io/docs.html?article=quickstart)
- Report a problem or ask for a feature on [GitHub Issues](https://github.com/vgrippa/myflames/issues)

Inspired by [Brendan Gregg's FlameGraph](https://github.com/brendangregg/FlameGraph) and [Tanel Poder's SQL Plan FlameGraphs](https://tanelpoder.com/posts/visualizing-sql-plan-execution-time-with-flamegraphs/).
