VillageSQL is a drop-in replacement for MySQL with extensions.
All examples in this guide work on VillageSQL. Install Now →
mysqldump — Logical Backups
mysqldump exports data as SQL statements. It’s the most portable format and works for databases of any size, though it’s slower to restore than binary backups for large datasets.
Back up a single database:
Without
--single-transaction, mysqldump locks tables with LOCK TABLES, which blocks writes for the duration of the dump.
Restore from a dump:
mysql -u root -p < all_databases.sql
Point-in-Time Recovery with Binary Logs
Full backups only protect you to the point of the last backup. Binary logging lets you replay every change made after the backup was taken. Requirements:- Binary logging enabled (
log_bin = ON) --source-data=2used when taking the backup (records the starting binlog position)
- Restore the full backup:
- Find the binlog starting position from the dump file:
- Replay binary logs up to the point just before the event you want to undo:
MySQL Shell Dump Utilities
MySQL Shell (mysqlsh) provides faster dump and load utilities than mysqldump. They use parallel threads and produce compressed output, making them practical for large databases.
mysqldump is significant.
Backup Methods Compared
mysqldump is still the go-to for portability and simplicity. MySQL Shell dump has effectively replaced mysqlpump for large databases — it’s faster, produces smaller files, and supports MySQL 8.0+. mysqlpump is deprecated in MySQL 8.4 and should not be used for new backup scripts.
For production databases over ~50 GB where restore time matters, Percona XtraBackup or MySQL Shell dump are the practical choices.
When to use each method
Scheduling Backups
A cron job running a nightly dump is the most common production setup:SELECT, LOCK TABLES, SHOW VIEW, TRIGGER, EVENT, and RELOAD privileges — not ALL PRIVILEGES.
Verifying Backups
A backup you haven’t tested is not a backup. Verify regularly:Frequently Asked Questions
Does --single-transaction work with all storage engines?
No. --single-transaction uses a consistent read snapshot, which only InnoDB supports. MyISAM tables in the same database are still locked with LOCK TABLES during the dump. If you have mixed engines, --single-transaction alone isn’t sufficient for a fully consistent dump.
How long should I retain backups?
At minimum: daily backups for 7–14 days, weekly backups for 4 weeks, monthly backups for a year. Retention depends on regulatory requirements and how far back you might need to recover. Binary logs should be retained long enough to cover the gap between your oldest retained backup and now.Is copying the data directory a valid backup?
Only if the server is shut down first (cold copy). A running MySQL server writes data files in a way that’s not safe to copy directly — you’ll get a corrupt backup. For hot backups without stopping the server, use MySQL Shell’s dump utility or Percona XtraBackup.Troubleshooting
See also
- MySQL Binary Logging — binary logs power point-in-time recovery
- MySQL Replication Basics — replication depends on the same binary log infrastructure

