WordPress Core Update Stuck at 'Updating' - Recovery Guide

You click "Update WordPress." The dashboard says "Updating WordPress..." and you wait.

You wait some more.

10 minutes pass. Still updating. 30 minutes. 45 minutes. Your site's down. You can't access the admin. You start panicking.

Did it break? Did it erase everything? Should you restore from backup?

Most of the time, the update isn't stuck. It's just slow. Or your server killed it midway. Or a plugin incompatibility halted it silently. But it looks frozen, so your brain assumes the worst.

We've recovered dozens of stuck updates. Sometimes the fix takes 30 seconds. Sometimes you need to dig into your server. We've never lost data, and you won't either if you follow this guide.


Why WordPress Updates Get Stuck

A WordPress core update is actually 4 separate processes:

  1. Download the update files from wordpress.org
  2. Backup your current WordPress installation
  3. Replace old files with new files
  4. Run any database migrations needed

If any step hangs or fails, the whole process stalls. The update lock stays active and won't let you try again.

Common causes:

  • Slow download: You're on a slow connection, or your server's outbound bandwidth is throttled. Downloading 100MB core files over a slow connection can take 20-30 minutes.
  • Server timeout: Your server killed the PHP script after 300 seconds (max execution time). The update was halfway done and the process died.
  • Disk space: WordPress needs free disk space to extract files. If you're at 95% disk capacity, the update fails silently.
  • File permissions: WordPress can't write to wp-content/upgrade or wp-admin. The update stalls waiting for permission.
  • Plugin conflict: A plugin hooked into the update process, did something heavy, and the request timed out.
  • Memory limit: The update ran out of PHP memory before finishing the database migrations.
  • FTP/SFTP mode: Your server requires FTP credentials to write files. The update hangs waiting for you to enter credentials (but you never got a prompt).

First: Don't Panic (Your Data Is Fine)

Your files are backed up during the update process. WordPress copies everything to wp-content/upgrade/ before touching the core files. If something goes wrong, WordPress can roll back. You're not one wrong move away from losing everything.

Your database hasn't been updated yet. Database migrations are the last step. If the update hung early, your database is still on the old version. Even if the files partially updated, your database is safe.

The worst-case scenario is you delete the partial update and start over. Your site stays intact.


Step 1: Check if It's Actually Stuck

Wait 15 minutes

Seriously. WordPress updates on large sites can take 20-40 minutes. If you've been waiting less than 15 minutes, let it finish. The dashboard might not update in real-time, so the progress bar looks frozen even though it's working.

How to know if it's actually running:

  1. Open your server's terminal (SSH)
  2. Run: ps aux | grep php
  3. Look for a process running wp-cron.php or any long-running PHP process
  4. If you see one, the update is still running. Wait more.

Check server logs

  1. Connect via FTP or SSH
  2. Download wp-content/debug.log (if it exists)
  3. Look for recent entries. Are there update-related messages?
  4. If the log is being written to, the update is still running

If you don't see any activity after waiting 30 minutes, it's actually stuck. Move to Step 2.


Step 2: Clear the Update Lock

WordPress uses a flag in the database to know "an update is in progress." If the update fails or hangs, this flag stays set, and WordPress won't let you try again.

Clear it by logging into your hosting control panel and running this SQL query:

DELETE FROM wp_options WHERE option_name = 'core_updater.lock';

If you don't have direct database access:

  1. Install and activate "DB Switcher" or "Adminer" plugin (upload manually via FTP if you can't access admin)
  2. Run the query above
  3. Try the update again

If you can't run SQL queries: Continue to Step 3.


Step 3: Force-Cancel the Update (If It's Really Stuck)

If clearing the lock didn't work, or you can't access the database, force-cancel it.

Option A: Via FTP (Safest)

  1. Connect via FTP
  2. Navigate to wp-content/
  3. Look for a folder called upgrade
  4. Delete the entire upgrade folder
  5. Go back to your WordPress admin and try updating again

Why this works: The upgrade folder holds the partial update. Deleting it tells WordPress "the update was cancelled" and resets the process.

Option B: Via SSH (Faster)

  1. SSH into your server
  2. Navigate to your WordPress root: cd /var/www/wordpress
  3. Run: rm -rf wp-content/upgrade
  4. Run: chown -R www-data:www-data wp-content (restores correct permissions)
  5. Try updating again

Now try the update again from the WordPress admin. It should start fresh.


Step 4: If the Update Fails Again, Diagnose Why

Check disk space

df -h

Look for the partition containing WordPress. If it shows 95%+ full, you need more disk space before updating. WordPress needs at least 20% free space to complete updates safely.

Solution: Delete old backups, plugin caches, or unused files. Or upgrade your hosting plan.

Check PHP memory limit

  1. Create a blank PHP file with:
    <?php phpinfo(); ?>
  2. Upload it to your server
  3. Visit it in a browser
  4. Look for "memory_limit"
  5. If it's less than 256MB, increase it

To increase memory limit: Edit wp-config.php and add before "That's all, stop editing!":

define( 'WP_MEMORY_LIMIT', '256M' );

Check max execution time

In that same phpinfo() output, look for "max_execution_time". If it's 30 seconds or 60 seconds, it's too low for large updates.

To increase it: Edit .htaccess (if using Apache) and add:

php_value max_execution_time 300

Or ask your hosting to increase it. Most decent hosts can do this in the control panel.

Check file permissions

The update needs to write to several folders. Run:

ls -la wp-content/ | grep -E "wp-content upgrade|wp-plugins"

Look for permission columns. They should show something like drwxrwxr-x (755) or drwxr-xr-x. If you see drwxr--r-- (644), permissions are too restrictive.

To fix:

chmod 755 wp-content
chmod 755 wp-content/upgrade
chmod 755 wp-admin
chmod 755 wp-includes

Check if plugins are interfering

Temporarily deactivate all plugins, then try updating:

  1. Via FTP, rename wp-content/plugins to wp-content/plugins-old
  2. Try the WordPress update
  3. If it works, rename wp-content/plugins-old back to wp-content/plugins
  4. Update plugins one at a time to find which one caused the issue

Step 5: Manual Core Update (Last Resort)

If the automatic update keeps failing, you can update WordPress manually.

This sounds scarier than it is. It's actually very safe.

Download the latest WordPress

  1. Go to wordpress.org
  2. Download the latest .zip file (say WordPress 6.7)
  3. Extract it on your computer
  4. Delete these folders from the extracted WordPress (keep your local version):
    • wp-config.php
    • wp-content/
    • .htaccess

Upload to your server via FTP

  1. Connect via FTP to your server
  2. Upload all remaining WordPress files from your extracted folder
  3. Replace the existing wp-admin and wp-includes folders (they should be safe to overwrite)
  4. Leave wp-content alone (all your plugins and themes are there)

Run database update

  1. Visit your site: yoursite.com/wp-admin
  2. You might see a message: "WordPress database needs to be updated."
  3. Click the link to update the database
  4. Wait for it to finish

That's it. Your site is now updated.

Why manual updating is safe:

  • You're only replacing wp-admin and wp-includes (WordPress core files)
  • Your plugins, themes, and data stay untouched
  • The database update is the same whether automatic or manual
  • If something breaks, you still have a backup

Step 6: After a Successful Update

Do these things immediately:

  1. Clear all caches: If using WP Super Cache, LiteSpeed, or a CDN, clear everything
  2. Test the frontend: Visit your site and make sure pages load
  3. Test the admin: Log out and back in. Edit a post.
  4. Check plugins: Do they all still show as active and working?
  5. Check for errors: Look at debug.log for any errors
  6. Test a form/feature: If your site has forms or special features, test them

If you see PHP errors:

  • A plugin is incompatible with the new WordPress version
  • Update or disable the plugin
  • Contact the plugin developer if it's a popular plugin

Real-World Stuck Update Story

Scenario: Client's site got stuck on the update screen for 2 hours. Dashboard was frozen. Site was showing the "briefly unavailable" message.

What actually happened:

  • Update started at 2pm
  • Server ran out of disk space at 2:15pm (upgrade folder was getting too big)
  • PHP script timed out at 2:20pm
  • Update lock stayed active in the database
  • Client kept refreshing the page, panicking
  • By 4pm, they called us

Our fix:

  1. Deleted old backup files (freed up 8GB)
  2. Cleared the update lock via database
  3. Tried the update again
  4. It completed in 3 minutes

Total time to fix: 5 minutes. The panic was worse than the actual problem.


Prevention: Never Get Stuck Again

1. Keep plenty of free disk space

WordPress needs 20% free space minimum. Monitor your disk usage monthly.

2. Increase PHP limits before updating

Before any major update, increase memory_limit and max_execution_time.

3. Update during low-traffic times

Update at 2am, not 2pm. Fewer concurrent users = less stress on the server.

4. Test on staging first

If you have a staging environment, update there first. Catch issues before production.

5. Keep a recent backup

Use BackWPup or UpdraftPlus to auto-backup daily. If an update truly goes wrong, restore from backup.

6. Don't interrupt the update

Don't refresh, don't close the tab, don't restart your server. Let it finish or fail completely. Interrupting it is the #1 cause of stuck updates.


Stuck Update Troubleshooting Checklist

Update has been running for 30+ minutes?

  • āœ“ Check if PHP process is still running (ps aux | grep php)
  • āœ“ Check debug.log for recent entries
  • āœ“ Wait 15 more minutes (seriously)
  • āœ“ Clear the update lock (DELETE FROM wp_options)
  • āœ“ Try the update again

Update failed/stuck again?

  • āœ“ Delete wp-content/upgrade folder
  • āœ“ Check disk space (df -h)
  • āœ“ Check PHP memory_limit
  • āœ“ Check max_execution_time
  • āœ“ Check file permissions (chmod 755)
  • āœ“ Disable all plugins and try again

Still stuck?

  • āœ“ Do a manual update (download, FTP upload, database update)
  • āœ“ Contact your hosting support (they might see server errors you can't)

The Real Talk

Stuck WordPress updates are genuinely scary. Your site's down, you don't know what's happening, and you're worried you'll have to restore from backup and lose recent changes.

In reality, 95% of stuck updates can be recovered in under 10 minutes. You're not losing data. The update isn't broken. Something just timed out or ran out of resources.

The difference between a 15-minute problem and a 2-hour panic is knowing what to check. Clear the lock. Delete the upgrade folder. Check disk space. Try again.

Most of the time, one of those steps fixes it.

And if it doesn't? Manual update takes 15 minutes and works 100% of the time. You get your site updated, you keep all your data, and you move on.

Don't let a stuck update terrify you. It's usually smaller than it feels.