Manual Backups
You can create a backup at any time from the BD Backup dashboard. Two types are available:
Full Backup (Files + Database)
A full backup archives your entire WordPress installation into a single ZIP file. This includes:
- All WordPress core files
- All themes (active and inactive)
- All plugins (active and inactive)
- The entire
wp-content/uploads/media library - Any other files in your WordPress root directory
- A complete SQL export of every database table
- A
manifest.jsonfile containing backup metadata (plugin version, WordPress version, PHP version, site URL, creation timestamp, file count, and table count)
To start a full backup, click the Full Backup card in the Quick Actions section of the Dashboard tab.
Database Only Backup
A database-only backup exports all your database tables to a SQL dump file and packages it with a manifest into a ZIP. No site files are included. This is ideal for:
- Quick snapshots before making changes to posts, pages, or settings
- Daily automated backups when file changes are infrequent
- Environments where disk space is limited
To start a database-only backup, click the Database Only card in the Quick Actions section.
Tip: Only one backup or restore operation can run at a time. The Quick Action cards are disabled while another operation is in progress. A lock mechanism with a 10-minute automatic expiry prevents concurrent operations and cleans up stale locks if a previous backup was interrupted.
How Chunked Processing Works
BD Backup processes backups in small chunks via AJAX requests to avoid hitting PHP execution time limits. Here is how each phase works internally:
- Scanning — the file scanner recursively walks your WordPress directory and builds a manifest (a JSON list of all relative file paths). Excluded paths, excluded extensions, and files exceeding the max file size are filtered out. The backup storage directory (
wp-content/uploads/backups-bdbk/) is always excluded automatically. The manifest is written to a temporary file protected with a PHP header to prevent direct access. - Exporting database — the DB exporter iterates through all database tables. For each table, it writes a
DROP TABLE IF EXISTSstatement followed by theCREATE TABLEstructure, then exports rows in batches. The number of rows per batch is controlled by the Database rows per chunk setting (default: 2,000). The number of tables processed per AJAX call is controlled by Tables per batch (default: 10). A 20-second time guard ensures no single chunk exceeds PHP limits. - Archiving files — all files from the manifest are added to a ZIP archive in a single PclZip
create()call. This single-call approach is deliberately chosen because PclZip must re-read the entire archive each timeadd()is called, making chunked appending extremely slow for large archives. Files that no longer exist or are unreadable at archive time are silently skipped. - Archiving database — the SQL dump file and a
manifest.jsonfile are appended to the ZIP using PclZipadd(). - Finalizing — the ZIP is moved from the temporary directory to the final storage path. File size, file count, and table count are recorded in the backup log.
- Cleanup — temporary files are deleted. The retention policy is enforced: completed backups beyond the retention count are automatically deleted (oldest first). The backup is marked as complete, and an email notification is sent if configured.
Scheduling Automated Backups
To set up automatic backups, navigate to the Settings tab and configure the Schedule section:
Backup Frequency
The Backup Frequency dropdown controls how often scheduled backups run. Options are:
- Disabled — no scheduled backups (default).
- Daily — runs once every day at the specified time.
- Weekly — runs once every week on the specified day and time.
- Monthly — runs on the first day of each month at the specified time.
Time
The Time field sets what time of day the backup runs, in your site’s configured timezone (set under Settings → General in WordPress). The default is 03:00 (3:00 AM), which is typically a low-traffic period.
Day of Week
The Day of Week dropdown appears only when the frequency is set to Weekly. Choose any day from Monday through Sunday. The default is Monday.
Default Backup Type
The Default Backup Type dropdown controls whether scheduled backups are Full (Files + DB) or Database Only. The default is Full.
Tip: For most sites, a weekly full backup combined with daily database-only backups provides excellent protection. You can achieve this by setting the schedule to Daily with Database Only type, and running a manual full backup once a week, or vice versa.
How Scheduled Backups Run
Scheduled backups use WordPress cron (WP-Cron). The plugin schedules a single event at the calculated next run time. When the event fires:
- The backup engine starts a new backup of the configured type.
- A self-chaining cron mechanism processes the backup in 90-second chunks. Each chunk processes as many backup phases as possible within 90 seconds, then schedules a continuation event 10 seconds later.
- This continues until the backup is complete or fails.
- After the backup finishes, the next scheduled run is automatically re-calculated and registered.
The next scheduled backup time is shown in the top-right corner of the BD Backup dashboard header.
Important: WordPress cron depends on site visits to trigger. If your site has very low traffic, scheduled backups may run later than expected. Consider setting up a real cron job on your server that hits
wp-cron.phpat regular intervals to ensure timely execution.
Retention Settings
The Keep last N backups setting (found under the Retention section in Settings) controls how many completed backups are retained. When a new backup finishes successfully, any completed backups beyond this count are automatically deleted, oldest first. Both the ZIP file and the log entry are removed.
The default retention count is 5. The minimum is 1 and the maximum is 100.
Failed and cancelled backup entries remain in the history log but do not count toward the retention limit (their ZIP files, if any, are cleaned up during the backup process).
Notification Settings
Under the Notifications section in Settings, you can configure email alerts:
- Email on success — sends an email when a backup completes. The email includes the backup type, file name, size, duration, file count, table count, trigger type, and completion timestamp. Disabled by default.
- Email on failure — sends an email when a backup fails, including the error message. Enabled by default.
- Email address — the recipient address for notifications. Leave blank to use the WordPress admin email address (shown as a placeholder in the field).
Exclusion Settings
The Exclusions section in Settings lets you fine-tune what gets included in full backups:
Exclude Paths
A text area where you enter directory paths to exclude, one per line, relative to the WordPress root. The defaults are:
wp-content/cachewp-content/upgradewp-content/backups-bdbk
The backup storage directory (wp-content/uploads/backups-bdbk) is always excluded automatically, even if you remove it from this list. Any path you add here will cause all files under that directory to be skipped during the file scanning phase.
Exclude File Extensions
A comma-separated list of file extensions to skip. The defaults are log,tmp,bak. For example, adding mp4,avi would exclude all video files from full backups.
Max File Size (MB)
Files larger than this size (in megabytes) are skipped during full backups. The default is 0 (no limit). Setting this to, for example, 50 would skip any file larger than 50 MB, which is useful for excluding large media files or database dumps from other plugins.
Performance Tuning
The Performance Tuning section contains three settings that control how aggressively the backup engine processes data. Adjust these based on your server’s capabilities:
Files per chunk
Controls the batch size for the legacy chunked file archiving fallback. The default is 500. In normal operation, all files are archived in a single PclZip call (which is faster), so this setting primarily serves as a fallback parameter. Valid range: 10 to 1,000.
Database rows per chunk
The number of database rows exported per batch when dumping each table. The default is 2,000. If your database has very large tables and you experience timeouts, reduce this value. If your server is fast, increase it to speed up the export. Valid range: 100 to 10,000.
Tables per batch
The number of complete database tables processed per AJAX chunk during the export phase. The default is 10. On hosts with many tables or very large tables, reducing this to 1–5 can prevent timeout errors. Valid range: 1 to 50.
Tip: If your backups are failing with timeout errors, try reducing Database rows per chunk to 500 and Tables per batch to 3. This makes each processing chunk smaller and faster, giving it a better chance of completing within your server’s execution time limit.
The Backup Log
Every backup operation (whether manual or scheduled) is recorded in the backup log table ({prefix}_bdbk_backup_log). Each entry includes:
- Status — one of:
complete,failed,cancelled, orin_progress. - Backup type —
fullordb_only. - Trigger type —
manual(started from the dashboard) orscheduled(started by cron). - File name and path — the ZIP filename and its absolute path on disk.
- File size — the size of the completed ZIP file in bytes.
- File count — the number of files included in the backup.
- Table count — the number of database tables exported.
- Started at / Completed at — UTC timestamps.
- Duration — how long the backup took in seconds.
- Error message — if the backup failed, the error is recorded here.
- WordPress and PHP versions — the versions at the time the backup was created.
You can view the full backup log on the History tab, with filters for status and type. The log supports pagination for sites with many backups.
Cancelling a Backup
If a backup is in progress, a Cancel button appears in the progress section on the Dashboard tab. Clicking it:
- Cleans up any temporary files and partial ZIP archives in the temp directory.
- Marks the backup log entry as
cancelled. - Releases the backup lock so you can start a new operation.
Cancelled backups remain in the History log for reference but do not count toward the retention limit and have no associated file on disk.