Services built by a real sysadmin.

Every product in this shop was tested in production, optimized under pressure, and designed to make your infrastructure safer, faster, and cleaner.

Browse services

Recovering MySQL Databases on a Crashed cPanel Server Without Backups

When a cPanel server experiences catastrophic failure without any valid backups, restoring websites and databases manually becomes the only option. In my case, the server had completely failed and could only be accessed via a rescue environment. No backups were available in /backup, and the system was non-bootable due to critical library corruption.

To recover, I mounted the failed system, manually transferred essential directories such as /var/lib/mysql and /home to a freshly installed cPanel server using rsync, and fixed ownership and permissions. This restored websites and database files physically, but cPanel/WHM did not recognize the MySQL databases or users.

Problem: cPanel Doesn’t Recognize Existing MySQL Databases

Although the database folders were correctly placed in /var/lib/mysql/ and all MySQL users were present in the mysql.user table, cPanel GUI showed no databases or users associated with any account.

This is expected behavior — cPanel stores mappings between accounts, databases, and MySQL users in its own internal metadata files, which were not recoverable.

Solution: Rebuild cPanel MySQL Mapping Using dbmaptool

To restore MySQL database and user associations for each cPanel account without recreating them manually, I used the official cPanel utility:

/usr/local/cpanel/bin/dbmaptool

I created a script that:

  • Loops through all cPanel users (found in /var/cpanel/users)
  • For each user, finds all MySQL databases starting with the user’s prefix (e.g. user_db1)
  • Finds all MySQL users belonging to that prefix (e.g. user_dbuser1)
  • Automatically maps them using dbmaptool
#!/bin/bash

for user in $(ls /var/cpanel/users); do
  dbs=$(mysql -N -e "SHOW DATABASES LIKE '${user}\_%';" | tr '\n' ',' | sed 's/,\$//')
  dbusers=$(mysql -N -e "SELECT User FROM mysql.user WHERE User LIKE '${user}\_%';" | tr '\n' ',' | sed 's/,\$//')

  if [[ -n "$dbs" || -n "$dbusers" ]]; then
    echo "Mapping for user: $user"
    /usr/local/cpanel/bin/dbmaptool "$user" --type 'mysql' --dbs "$dbs" --dbusers "$dbusers"
  fi
done

Final Cache Refresh

After running the script, I executed:

/scripts/update_db_cache
/scripts/updateuserdatacache

This forced cPanel to reload and re-index the updated metadata, and all previously invisible databases and MySQL users reappeared in the cPanel UI for each respective account.

Even in total system failure scenarios with no backups, if the /home and /var/lib/mysql directories are intact and MySQL users are present, it’s entirely possible to recover a cPanel environment manually. The key is to re-establish metadata associations using dbmaptool, which tells cPanel which databases and users belong to which accounts.

Need Expert Help?

If you’re still having issues with your server or network setup, let’s fix it together. Schedule a one-on-one consultation now.

Schedule a Consultation

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *