After an update, WordPress shows "Database Update Required". You click Update WordPress Database, it says Update Complete, you click Continue, and the same screen is back. You cannot reach the dashboard at all. The visitors' side of the site usually still works, which is why this can go unnoticed until someone needs to edit a page. Below is a rebuilt example (not a real client), the one-minute check, and the fix for each cause.
Every WordPress release carries a database revision number in its files. The database keeps the number of the last update it ran, in the db_version setting. When you open the dashboard, WordPress compares the two. If they differ it sends you to the update screen, runs the changes, and writes the new number. A loop means that new number is either never written or never read back: WordPress keeps seeing the old one.
wp-content. A file called object-cache.php means Redis, Memcached or a cache plugin is storing settings outside the database. This is the most common cause of the loop.wp_options table (your prefix may differ) and find db_version. Click the update button, then look again. If the number changed, the update worked and something is serving an old copy (row 1). If it did not change, the update could not write (rows 2-4).wp core version --extra shows the revision the files expect, and wp option get db_version shows what the database holds.| What you see | Why it happens | The fix |
|---|---|---|
| "Update Complete", then the screen comes straight back. The number in the database did change | A persistent object cache (Redis, Memcached, or the host's own) still holds the old db_version and hands it to WordPress on every page load | Flush the object cache: the Redis or cache plugin's Flush button, the host panel's purge, or wp cache flush. If you cannot reach any of those, rename wp-content/object-cache.php to object-cache.php.off, load the dashboard once, then rename it back and flush |
| The number in the database never changes, no error shown | The database user in wp-config.php may read but not change tables (no ALTER, CREATE or INDEX rights). Common after a host move where the new user was given limited rights | In the host's MySQL users page, give that user all privileges on the site's database, then run the update again. Your host's support can do this in a minute if the page is hidden |
| The update screen spins, then a blank page or 500, and it starts again next time | A large site (big shop, years of posts) runs out of time or memory before the update finishes, or the host's disk or database quota is full so nothing can be written | Run it from the command line: wp core update-db, which has no web time limit. Check the host's disk and database usage; free space or raise the quota first. See memory exhausted if the log names memory |
| Started after an update that failed half way or was copied by FTP | Some core files are from the new release and some from the old one, so the files keep announcing a revision the update code does not finish | Download the same WordPress version fresh from wordpress.org and upload wp-admin, wp-includes and the root files over the old ones. Never overwrite wp-content or wp-config.php. Then run the update once |
| Multisite: the main site is fine, but each sub-site asks for the update | Every site in a network has its own tables and its own db_version. The network upgrade was never run, or stopped part way | As a Super Admin, go to Network Admin > Updates > Upgrade Network and let it finish all sites. On a large network, wp core update-db --network |
| It appeared after restoring a backup or moving the site | The database came from an older or newer WordPress than the files it now sits under | If the database is older, running the update once is correct. If it came from a newer WordPress, update the files to that version (or newer) instead of running the update against older files |
db_version by hand to "match". The screen goes away, but the table changes the release needs never run, and things break later in quieter ways.object-cache.php and forget about it. Rename it, fix the loop, and put it back, or the site loses the speed the cache was giving it.Flushing a cache takes a minute. Finding which cache layer holds the old number, fixing database rights at a host you did not set up, or untangling a half-finished update on a live shop is where most owners would rather have someone do it. If that is you, the box below is for that. Related: a plugin won't install or update, stuck in maintenance mode and error establishing a database connection.