phpMyAdmin Export Timing Out? Fix Large Database Backups
You clicked Export in phpMyAdmin, picked your database, hit Go — and now the tab's been spinning for two minutes, or it came back with a blank page, or the download just... never started. On a big database, phpMyAdmin's export is one of the easiest things to break, and it fails in a way that looks nothing like the import errors most guides cover. Here's what's actually happening and how to get a reliable backup out of a large cPanel database.
Symptom: What a Failed Export Looks Like
Unlike a failed import, a failed export rarely gives you a clean error message. What you'll usually see instead:
- The browser tab spins indefinitely, then eventually shows a blank page or "This page isn't working."
- A Cloudflare or nginx 524 / 504 timeout page appears instead of the downloaded file.
- The download starts, but the file is a fraction of the expected size and the SQL file ends mid-
INSERTstatement. - phpMyAdmin throws
Fatal error: Allowed memory size exhaustedpartway through. - Nothing downloads at all — the tab just returns you to the Export screen.
None of these are database corruption. They're phpMyAdmin — a PHP script running inside a browser request — hitting a wall that mysqldump run from the command line simply wouldn't.
Cause 1: phpMyAdmin's Own Export Timeout
Separate from PHP's max_execution_time, phpMyAdmin enforces its own script timeout ($cfg['ExecTimeLimit']), and on shared cPanel hosting this is usually locked to a low default. A database with a few hundred MB of WooCommerce order data, post revisions, or session logs can easily take longer than that to serialize into SQL — and the export just gets killed mid-run, leaving you with a broken partial file.
Fix It
You generally can't edit phpMyAdmin's config file directly on shared cPanel hosting, so instead of fighting the timeout, sidestep it:
- In phpMyAdmin, select your database and click Export.
- Choose Custom (not Quick) as the export method.
- Under "Output," tick Save output to a file on the server if your host has it enabled. This writes the dump directly to disk instead of streaming it through the browser, so there's no download timeout to hit.
- If that option isn't available, split the export by table instead of dumping the whole database in one request — export your three or four largest tables (usually
wp_options,wp_postmeta, or an orders table) separately from the rest.
Cause 2: PHP Memory Limit Exhausted Mid-Export
Building a SQL dump means phpMyAdmin has to hold chunks of table data in memory, format it, and (if you asked for compression) gzip it — all inside PHP's memory ceiling. On a database with wide tables or large TEXT/BLOB columns, that's often what actually triggers the fatal error, not the timeout.
Fix It
Raise the PHP memory limit for the domain before you export:
| Setting | Where | Recommended value |
|---|---|---|
memory_limit | cPanel > Software > MultiPHP INI Editor | 512M–1024M (temporarily) |
| Compression | phpMyAdmin's Export screen | Set to "None" for the export, then gzip it yourself after |
Turning compression off in phpMyAdmin and compressing the plain .sql file afterward (with File Manager's built-in zip tool, or gzip over SSH) avoids asking PHP to hold both the raw dump and a compressed copy in memory at once. Drop memory_limit back down once you're done — there's no reason to leave it high for a site that doesn't need it.
Cause 3: The Proxy or CDN Times Out First
If your domain sits behind Cloudflare or another proxy, you can raise every PHP and phpMyAdmin limit you want and the export will still die — because the CDN's own timeout (typically 100 seconds for Cloudflare's free/pro tiers) cuts the connection before your server even gets a chance to finish. This is the classic 524 error, and it has nothing to do with your hosting account's configuration.
Fix It
Either export through your real origin IP (bypassing the proxy temporarily), or — better for anything over ~50 MB — skip the browser entirely and pull the dump over SSH:
mysqldump -u dbuser -p --single-transaction --quick dbname | gzip > dbname_backup.sql.gz
--single-transaction keeps the dump consistent without locking InnoDB tables while it runs, and --quick streams rows instead of buffering the whole table in memory. This one command sidesteps every limit above — no PHP memory ceiling, no browser timeout, no CDN in the way — because it's a native MySQL client talking straight to the database.
Cause 4: You're Exporting a Live, High-Traffic Database
On a busy WooCommerce store or membership site, tables are being written to constantly. A long-running export without --single-transaction (or the phpMyAdmin equivalent) can produce a dump where some tables reflect data from the start of the export and others reflect data from five minutes later — which is how you end up with a "restored" site showing orders that don't match their line items.
Fix It
For anything beyond a small brochure site, don't rely on ad-hoc phpMyAdmin exports for backups at all. Use one of these instead:
- cPanel's built-in Backup Wizard or JetBackup — takes a consistent snapshot without you touching phpMyAdmin.
- A cron job running
mysqldump --single-transactionon a schedule, writing to a directory outside your public web root. - WP-CLI's
wp db exportif it's a WordPress site — same underlying mechanism, run over SSH, no browser involved.
Prevention: Stop Treating phpMyAdmin as Your Backup Tool
phpMyAdmin's export is fine for grabbing a quick copy of a small table before you make a change. It was never built to be a production backup system for a multi-hundred-MB database, and every limit above exists specifically to stop a single browser request from tying up a shared server for ten minutes. If you're exporting the same large database by hand every week, that's the sign to automate it:
- Set up a nightly
mysqldumpcron job that rotates old backups and stores them off-site (S3-compatible storage or rclone to Google Drive/Dropbox). - Turn on automated JetBackup or cPanel backups if your plan includes them, and actually check that a restore works before you need it for real.
- Keep manual phpMyAdmin exports for what they're good at: one table, one quick pull, done in under a minute.
Frequently asked questions
Why does my phpMyAdmin export work fine for small databases but fail on large ones?
Small databases finish well within phpMyAdmin's script timeout and PHP's memory limit, so you never hit the ceiling. Once a database grows past roughly 50-100 MB, the time and memory needed to build the dump can exceed those limits, and the export gets killed mid-run instead of failing cleanly.
Is it safe to export a WooCommerce or membership database while the site is live?
Only if the export uses a consistent snapshot method. phpMyAdmin's default export doesn't lock InnoDB tables, so a long export on a busy site can capture different tables at different points in time. Use mysqldump with --single-transaction over SSH, or cPanel's Backup Wizard, for anything business-critical.
What's the largest database phpMyAdmin can realistically export through the browser?
There's no hard number since it depends on your host's PHP limits and whether a CDN sits in front of the domain, but as a rule of thumb, anything over 200-300 MB is more reliably exported over SSH with mysqldump than through phpMyAdmin's browser-based export.
Should I turn off Cloudflare to run a phpMyAdmin export?
You don't need to disable it account-wide. Either export through your origin server's direct IP temporarily, or better, skip the browser entirely and run mysqldump over SSH, which never touches the CDN at all.