Copy a MySQL database from production to your Mac, to staging, or anywhere else — with guard rails that never overwrite a remote database and never touch the source.
Captured from the released app. Connections and databases are made-up Acme sample data.
Features
Cloning databases by hand means juggling dump commands, tunnels and credentials — and one wrong host can overwrite the wrong server. MySQL Cloner does it in a guided wizard and refuses the dangerous cases.
A remote destination must not exist yet or be completely empty — no tables, views, routines, triggers or events. If anything is there, the clone is blocked and the objects are listed. There is no force option, and MySQL Cloner never drops a remote database.
Refreshing your local database from production is one wizard. Replacing existing data needs the database name typed out, an acknowledgement and a final confirmation, with an optional backup first. The source is exported and verified before anything is deleted.
Pointing at 127.0.0.1 isn’t enough. A destination only counts as local if MySQL Cloner can see a MySQL server process on your Mac serving that port or socket — an SSH tunnel, Docker port or VPN on localhost is treated as remote.
Save profiles for local MySQL, direct TCP and SSH tunnels with agent, key or password authentication. Unknown SSH host keys need your approval and changed keys are refused. Passwords live in the macOS Keychain, never in plain text.
Imports don’t pipe a dump into a shell. Each statement is checked before it runs: it can only create objects in the database you chose and fill tables it created, so a dump can’t switch databases, drop tables or grant privileges.
Preflight checks cover connections, permissions, versions, disk space and destination safety, and the destination is checked again right before import. Afterwards every table’s row count and every view, routine, trigger and event is compared with the export.
Follow each stage live: connecting, exporting, verifying, importing and checking the result. Every clone is kept in a history with timestamped logs, checksums and copyable error details. Cancel safely at any time.
Exports use mysqldump with a consistent snapshot, streamed straight to a compressed, checksummed file. Routines, triggers, events, views, foreign keys, collations and auto-increment values all come across.
MySQL Cloner checks for new versions once a day and asks before installing — and never in the middle of a clone. Every update is signed, and verified before it replaces the app.
Built with Tauri and Rust for macOS 11+ (Apple Silicon). Signed and notarized. Requires the MySQL client tools (mysqldump).
Safety Rules
The source is only ever read. These rules are enforced by the app itself, not just the buttons on screen.
| Destination | What MySQL Cloner does |
|---|---|
| Database doesn’t exist yet | Creates it and imports. If someone else creates it in the meantime, the clone stops. |
| Exists, completely empty | Imports, after checking it’s still empty right before the first statement runs. |
| Remote, contains anything | Blocked. Shows what’s there. No overwrite or force option, ever. |
| Verified local, contains data | Replaced only after you type the database name and confirm twice, optionally with a backup first. |
Getting Started
Open the DMG and drag MySQL Cloner to Applications. It needs the MySQL client tools; if mysqldump isn’t found, run brew install mysql-client.
Create a profile for each server — local, direct or through SSH — and label it Local, Development, Staging or Production. Test it before saving.
Choose the database to copy and where it should go: an existing empty database or a new name.
Review the preflight checks and the summary. Anything unsafe is blocked before it can start.
Follow each stage live, then find the result, logs and checksum in Clone History.
Download
Free with a Salfade account. Signed and notarized for macOS, with built-in updates.
We design and build desktop apps, internal tools and developer tooling for startups and enterprises.