Website Backup & Restore
WordPress Backup Failed
Last reviewed
Direct answer
A WordPress backup usually fails because PHP hits a memory or execution-time limit, the server runs out of disk space or entry processes mid-job, or the remote storage destination (Dropbox, Google Drive, S3, FTP) rejects the connection — so read the exact error, free up resources or fix the destination, then retry the database and files as separate jobs if the full backup still times out.
Backups are the one job that has to touch every file and every database row, which makes them the fastest way to expose a hosting account that is low on memory, disk, or time. This guide separates the common failure signatures — memory exhaustion, timeouts, disk quota, broken remote storage, and database corruption — so you fix the actual bottleneck instead of clicking "retry" on a job that will fail the same way every time.
Key facts
Verifiable numbers and definitions — each claim links to its source.
- A full WordPress restore needs both the database and the files; downloading wp-content alone does not back up MySQL/MariaDB data that lives outside the web root. (WordPress backups)
- WordPress recommends keeping at least 3–5 recent backups in different locations so one failed or corrupted copy does not strand the site. (WordPress backups)
- WordPress documents backing up the database before upgrades and moves, with phpMyAdmin Export as a supported manual path when plugin backups fail. (WordPress backups)
What the error means
A WordPress backup has two halves that fail differently: exporting the database (usually mysqldump under the hood) and archiving the files (themes, plugins, uploads, wp-config.php). Backup plugins wrap both into one job and report a single "failed" status, which hides which half actually broke. Shared hosting enforces PHP memory_limit and max_execution_time, plus CPU and entry-process caps that a backup can burn through in seconds on a large site. A multi-gigabyte uploads folder or a database bloated with post revisions, transients, and stale logs turns a five-minute job into one that never finishes inside those limits. Remote storage adds another failure point: expired OAuth tokens, full storage quotas, or a firewall blocking outbound connections will fail the upload step even after a clean local export. Treat "backup failed" as a symptom and find which stage — export, archive, or upload — actually stopped before changing anything.
Common symptoms
- Backup plugin shows "Backup failed," a timeout notice, or the progress bar stalls at the same percentage every run
- Manual export in cPanel/phpMyAdmin never completes, times out in the browser, or produces a 0-byte SQL file
- PHP error log shows "Allowed memory size exhausted" or "Maximum execution time exceeded" during the backup window
- Remote destination (Dropbox, Google Drive, S3, FTP) reports an authentication error, expired token, or connection refused
- "No space left on device" or disk quota exceeded errors appear in the host panel or error log during the run
- WP-CLI wp db export hangs or returns "MySQL server has gone away"
- Downloaded backup archive is truncated, corrupt, or fails to extract
- Scheduled automatic backups silently stop — the plugin dashboard shows a last-successful date that is weeks old with no failure alert
Most likely causes
- 01 PHP memory_limit or max_execution_time set too low for the site's current size
- 02 Large uploads folder or bloated database (post revisions, transients, log tables, orphaned postmeta) pushes the job past resource or time caps
- 03 Third-party storage credentials expired, were revoked, or the destination quota is full
- 04 Shared hosting CPU/entry-process limits throttle or kill the backup process mid-run
- 05 Security plugin, firewall, or mod_security rule blocks the outbound connection to remote storage or blocks the plugin's own admin-ajax calls
- 06 Corrupted database table (often MyISAM) causes mysqldump or the plugin's export routine to hang or error out
- 07 Server disk space exhausted because old local backup copies were never rotated out
- 08 Backup plugin conflicts with a caching or security plugin that intercepts the long-running request
What changed before the problem started
- Site grew — more media uploads, more orders/posts, or years of accumulated revisions and transients since the last successful backup
- Backup plugin or WordPress core updated and changed default chunk size, timeout handling, or storage integration
- Hosting plan downgraded, or the site moved to a more resource-constrained shared server
- Storage provider (Dropbox/Google Drive/S3) revoked or expired the connected API token
- wp-config.php or server php.ini changed, lowering memory_limit or max_execution_time
- A traffic spike or another scheduled job (cron, cache warm, security scan) is now competing for resources during the same backup window
Troubleshooting steps
- 01
Read the exact failure message, not just "backup failed"
Open the backup plugin's log/history screen and the host's PHP error log for the timestamp of the failed run. A memory error, a timeout, a storage-auth error, and a disk-space error each point to a different fix — do not guess. Success signal: you can name the specific stage (export, archive, or upload) and the specific limit that was hit.
- 02
Check disk space and database size on the host
In cPanel/Plesk statistics or via SSH (df -h), confirm free disk space. In phpMyAdmin, check the database size and largest tables — wp_options, wp_postmeta, and revision-heavy wp_posts are common bloat sources. Success signal: at least 2–3x the database size is free on disk for a local dump before upload.
- 03
Clean up bloat before retrying
Delete old post revisions and expired transients (via WP-CLI wp post delete or a trusted cleanup plugin), empty spam/trash comments, and remove local backup copies the host or plugin left behind from earlier failed attempts. Success signal: database size and disk usage both drop measurably.
- 04
Raise PHP memory and execution time modestly for the backup window
Add define('WP_MEMORY_LIMIT', '256M'); to wp-config.php, or ask the host to raise memory_limit and max_execution_time for the backup process specifically. Do not set these to unlimited on shared hosting — the host's hard cap will still apply and may terminate the process anyway.
- 05
Verify the remote storage destination independently
Disconnect and reconnect Dropbox/Google Drive/S3 in the plugin settings, or test the FTP/SFTP credentials with a standalone client. An expired OAuth token or full storage quota will fail every backup until reconnected, even though the local export step works fine.
- 06
Split the job into database-only and files-only backups
Most backup plugins let you run a database export and a files archive separately. If one half succeeds and the other times out, you have isolated the bottleneck (usually the files archive on media-heavy sites) instead of re-running the whole combined job repeatedly.
- 07
Retry manually during a low-traffic window with logging enabled
Trigger the backup by hand rather than waiting for the schedule, ideally at off-peak hours when other cron jobs and visitor traffic are not competing for the same CPU/entry-process allowance. Success signal: the job completes and the plugin log shows no timeout or memory warnings.
When to stop troubleshooting
Stop troubleshooting on production if the site is large enough that every retry consumes a meaningful chunk of your hosting resource allowance, if you suspect database corruption beyond a single table, if you do not have SSH/WP-CLI or hosting panel access to check real resource usage, or if you need a verified-restorable backup before a risky change and cannot confirm one exists. Escalate with the exact error text, database size, current PHP limits, and the last date a backup actually completed and was restore-tested.
Information to collect before requesting help
- 01 Backup plugin name, version, and the exact error or log excerpt from the failed run
- 02 Whether the failure happens on database export, file archive, or remote upload specifically
- 03 Current PHP memory_limit and max_execution_time (from phpinfo() or wp-admin → Site Health)
- 04 Disk space used vs. available on the hosting account
- 05 Storage destination in use (local, Dropbox, Google Drive, S3, FTP) and any auth error shown
- 06 Database size and the largest tables (from phpMyAdmin)
- 07 Hosting provider, plan type (shared/VPS/managed), and any recent plan or resource-limit changes
- 08 Date of the last backup that actually completed and was verified restorable
How a professional repairs the problem
We isolate which stage of the backup pipeline is failing — export, archive, or upload — by reading plugin logs alongside the raw PHP and MySQL error logs, then measure actual database size, table health, and disk headroom rather than guessing at limits. We clean up bloat (revisions, transients, oversized log tables), right-size PHP memory and execution time within what the host allows, repair any corrupted tables, and reconnect or replace a failing remote storage destination. Once a backup completes cleanly, we run a real test restore to staging to confirm the archive is usable, then set a sustainable, monitored backup schedule so failures surface immediately instead of silently for weeks.
Frequently asked questions
Why does the backup fail at the same percentage every time? +
Is a 0-byte or missing backup file the same problem as a "failed" status? +
Should I just disable the security plugin to fix a backup failure? +
Can I back up the database and files separately and still restore fully? +
Will upgrading my hosting plan fix repeated backup failures? +
How do I know a backup is actually good without restoring my live site? +
Repair dispatch
Still Need Help Fixing Your Website?
If you are not comfortable editing website files, changing server settings, repairing a database, or troubleshooting a live website, professional help may prevent additional damage or downtime. We will review the problem before accepting the repair.
- You will receive a clear explanation of the likely cause.
- We will tell you if the issue falls outside our repair scope.
- No additional work will be performed without approval.
- A backup should be created whenever access and website condition allow it.
Do not share passwords through an unencrypted contact form — use Password Pusher (self-destructing link). Prefer a dedicated Rescue 404 admin account, not your personal owner login; if you cannot create one yet, we will add ours after repair.