Incremental MySQL Backups Explained: Complete Guide (2025)

Incremental backups only capture data that has changed since the last backup, dramatically reducing backup time and storage requirements. Instead of copying your entire 100GB database every day, you might only copy 1-5GB of changes.

This efficiency makes frequent backups practical. With full backups, running every 15 minutes would be prohibitively expensive in storage and I/O. With incremental backups, 15-minute intervals become feasible even for large databases.

This guide explains how incremental backups work at a technical level, how to implement them with MySQL physical backup tools, and best practices for managing incremental backup chains.

Full vs Incremental vs Differential Backups

Before diving into incrementals, let's clarify the three main backup strategies:

Full Backup

A complete copy of your entire database. Every backup is independent and self-contained. Simple to restore but expensive in storage and time.

Incremental Backup

Only captures changes since the LAST backup (full or incremental). Each incremental backup is small but depends on all previous backups in the chain.

Differential Backup

Captures all changes since the last FULL backup. Larger than incrementals but only requires the full backup plus one differential to restore.

StrategyStorage RequiredBackup SpeedRestore ComplexityChain Dependency
FullHighestSlowestSimpleNone
IncrementalLowestFastestComplexAll previous backups
DifferentialMediumMediumMediumOnly full backup

Most MySQL physical backup tools use true incremental backups based on InnoDB's Log Sequence Number (LSN), not differential backups.

How MySQL Incremental Backups Work

MySQL incremental backups leverage InnoDB's internal tracking mechanisms to identify which data pages have changed since a specific point.

Log Sequence Number (LSN)

Every time InnoDB modifies data, it increments a counter called the Log Sequence Number. This LSN is stored with each data page and in the redo log. By comparing LSNs, backup tools know exactly which pages have changed.

When you take a full backup, the tool records the final LSN. Subsequent incremental backups only copy pages with LSNs higher than the reference point.

The Backup Chain

An incremental backup strategy creates a chain: one full backup followed by multiple incrementals. To restore, you must have the complete chain.

Sunday:    Full Backup (LSN: 0 -> 1000000)
Monday:    Incremental (LSN: 1000000 -> 1050000)
Tuesday:   Incremental (LSN: 1050000 -> 1095000)
Wednesday: Incremental (LSN: 1095000 -> 1160000)
Thursday:  Incremental (LSN: 1160000 -> 1210000)

To restore Thursday's state:
- Apply Full Backup
- Apply Monday's incremental
- Apply Tuesday's incremental
- Apply Wednesday's incremental
- Apply Thursday's incremental

If any backup in the chain is corrupted or missing, you cannot restore beyond that point. This is why backup verification is critical for incremental strategies.

Implementing Incremental Backups

Here's how to set up incremental backups using Mariabackup (similar process for Percona XtraBackup):

Step 1: Create Base Full Backup

# Create full backup
mariabackup --backup \
  --target-dir=/backup/base \
  --user=backup_user \
  --password=secret

After completion, check the LSN in xtrabackup_checkpoints:

cat /backup/base/xtrabackup_checkpoints
# backup_type = full-backuped
# from_lsn = 0
# to_lsn = 1000000
# last_lsn = 1000005

Step 2: Create Incremental Backups

# First incremental - based on full backup
mariabackup --backup \
  --target-dir=/backup/inc1 \
  --incremental-basedir=/backup/base \
  --user=backup_user \
  --password=secret

# Second incremental - based on first incremental
mariabackup --backup \
  --target-dir=/backup/inc2 \
  --incremental-basedir=/backup/inc1 \
  --user=backup_user \
  --password=secret

Step 3: Prepare for Restore

Before restoring, you must 'prepare' the backups by applying the redo log and merging incrementals:

# Prepare base backup (keep redo log for incrementals)
mariabackup --prepare \
  --apply-log-only \
  --target-dir=/backup/base

# Apply first incremental
mariabackup --prepare \
  --apply-log-only \
  --target-dir=/backup/base \
  --incremental-dir=/backup/inc1

# Apply second incremental (last one, no --apply-log-only)
mariabackup --prepare \
  --target-dir=/backup/base \
  --incremental-dir=/backup/inc2

Step 4: Restore

# Stop MySQL
systemctl stop mariadb

# Remove old data
rm -rf /var/lib/mysql/*

# Copy prepared backup
mariabackup --copy-back --target-dir=/backup/base

# Fix permissions
chown -R mysql:mysql /var/lib/mysql

# Start MySQL
systemctl start mariadb

Storage and Time Savings

The efficiency of incremental backups depends on your data change rate. Here are typical scenarios:

Example: 100GB E-commerce Database

MetricFull Backups OnlyFull + Daily IncrementalFull + 15-min Incremental
Daily backup size100 GB2-5 GB50-200 MB
Weekly storage700 GB~130 GB~110 GB
Backup duration45-60 min5-10 min1-2 min
Production impactHighLowMinimal

Factors Affecting Incremental Size

  • Write activity volume - More changes = larger incrementals
  • Data distribution - Changes to many tables spread across pages
  • Page size - InnoDB backs up full 16KB pages even for small changes
  • Compression effectiveness - Already-compressed data doesn't shrink much more
  • Backup frequency - More frequent = smaller individual incrementals

For databases with heavy random writes across many tables, incrementals might be larger than expected. Monitor your actual incremental sizes to tune backup frequency.

Managing Incremental Chains

Long incremental chains create risk and complexity. If any backup in the chain is corrupted, you lose all subsequent recovery points.

Chain Length Strategy

Balance between storage efficiency and risk. Common approaches:

  • Weekly full + daily incrementals (7-backup chains)
  • Daily full + hourly incrementals (24-backup chains)
  • Daily full + 15-minute incrementals (96-backup chains)
  • Hourly full + 15-minute incrementals (4-backup chains)

Rotation and Retention

Implement a rotation strategy that maintains multiple complete chains:

Week 1: Full (Sun) + Inc (Mon-Sat) -> Keep 7 days
Week 2: Full (Sun) + Inc (Mon-Sat) -> Keep 7 days  
Week 3: Full (Sun) + Inc (Mon-Sat) -> Keep 7 days
Week 4: Archive Week 1's Sunday full for long-term

Verification Requirements

Every backup in an incremental chain should be verified. A single corrupt backup breaks the entire chain. Verification should:

  • Check file integrity (checksums)
  • Attempt actual restore to test server
  • Run validation queries against restored data
  • Alert immediately on any failure

Common Incremental Backup Mistakes

Mistake 1: Not Testing Restores

Many teams create incremental backups but never test the full restore chain until disaster strikes. Regular restore testing is essential - automate it if possible.

Mistake 2: Losing the Base Backup

If you delete or lose your full backup, all incrementals become useless. Ensure full backups are protected and replicated to multiple locations.

Mistake 3: Wrong basedir Reference

Incremental backups must reference the correct basedir. Using the wrong previous backup breaks the chain. Automate this process to prevent human error.

Mistake 4: Ignoring Verification

Without verification, you won't know a backup is corrupt until you need it. By then it's too late. Every incremental backup should be verified before the next one starts.

Mistake 5: Indefinite Chains

Chains that grow forever accumulate risk. Eventually, one link will fail. Start fresh full backups periodically to limit chain length and isolate failures.

How DBCalm Manages Incrementals

DBCalm automates the complexity of incremental backup management, eliminating common mistakes and ensuring reliable recovery.

Automated Chain Management

  • Automatic full backup scheduling based on chain length
  • Correct basedir tracking without manual intervention
  • Immediate verification of every incremental backup
  • Automatic rotation with configurable retention policies

15-Minute Incremental Backups

DBCalm creates incremental backups every 15 minutes, providing tight recovery points without excessive storage consumption. Each backup is verified immediately after creation.

Simplified Recovery

Instead of manually preparing and applying incrementals, DBCalm handles the entire prepare process automatically. Select a recovery point and the system handles the rest.

Frequently Asked Questions

How long can an incremental chain be?

There's no technical limit, but longer chains increase risk and restore time. Each incremental adds time to the prepare phase.

A practical maximum is 7-14 days of incrementals before taking a new full backup. For 15-minute incrementals, that's 672-1344 backups in a chain - manageable with automation but risky without verification.

Can I do incremental backups with mysqldump?

No, mysqldump doesn't support true incremental backups. It always exports the complete data set.

Some workarounds exist (binary log archiving, trigger-based change capture) but they're complex and don't provide the same efficiency as physical incremental backups.

What happens if an incremental backup fails?

A failed incremental backup doesn't affect previous backups in the chain. You can still restore to any point before the failure.

However, you'll need to create a new incremental (or full) backup to establish a new recovery point. This is why monitoring and alerting on backup failures is critical.

Are incremental backups smaller than differential backups?

Yes, individual incremental backups are smaller because each only captures changes since the last backup. Differential backups capture all changes since the last full backup, growing larger over time.

However, the total storage for a week might be similar. Incrementals have more files but each is smaller. The main advantage of incrementals is backup speed and lower production impact.

Related Guides

Ready to Implement Better Backups?

Try DBCalm SaaS

Fully managed MySQL backup solution with 15-minute incremental backups, automated verification, and expert support.

  • 15-minute recovery points
  • Automated backup testing
  • 24/7 monitoring and alerts
  • Expert support team

Starting at $29/month (50% off for first 200 customers)

Get Early Access

Deploy Open Source

Self-host DBCalm on your own infrastructure. Same backup engine, full control, zero monthly fees.

  • Complete source code access
  • Deploy anywhere with MySQL access
  • No vendor lock-in
  • Community support

Free and open source (MIT License)

View on GitHub

Questions? Contact our team to discuss your backup needs.