Database Intermediate

MariaDB Root Password Reset on Windows WSL2 Ubuntu using skip-grant-tables

Forgot your MariaDB root password in WSL2 Ubuntu? This guide helps you securely reset it using the skip-grant-tables method, getting your database back online.

👨‍💻
Senior Systems Architect • Verified in Staging Labs

Forgot your MariaDB root password in WSL2 Ubuntu? This guide helps you securely reset it using the skip-grant-tables method, getting your database back online.

Forgetting your database root password is a common, yet critical, issue for any administrator or developer. When working within a Windows Subsystem for Linux (WSL2) Ubuntu environment, the process to recover and reset the MariaDB root password requires specific steps to ensure your database remains secure and functional. This guide details the highly effective skip-grant-tables method, allowing you to regain control over your MariaDB instance by bypassing standard authentication temporarily.

Symptom & Error Signature

The primary symptom you will encounter is the inability to log in to your MariaDB instance as the root user. This typically manifests when attempting to connect via the command line, resulting in an "Access denied" error.

mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

You might also see similar Access denied errors in application logs if your web application (e.g., PHP, Python, Node.js) attempts to connect to MariaDB with incorrect root credentials.

Root Cause Analysis

The root cause of this issue is straightforward: the MariaDB root user's password is unknown, incorrect, or has been inadvertently changed or corrupted. MariaDB's robust authentication system prevents any user from logging in without the correct credentials, including the root user.

The skip-grant-tables method works by instructing the MariaDB server to start without loading the mysql.user and other grant tables. This effectively disables all authentication and authorization checks. When MariaDB is running in this mode, any user can connect as root without providing a password, allowing an administrator to perform critical tasks like resetting user passwords. Because MariaDB is running without its security checks, it is crucial to handle this state with extreme caution and restore normal operation as quickly as possible. The WSL2 environment makes this a relatively contained process, but the security implications are identical to a full server environment.

Step-by-Step Resolution

Follow these steps carefully to reset your MariaDB root password in your WSL2 Ubuntu instance.

1. Access your WSL2 Ubuntu Instance

First, open your Windows Terminal or PowerShell and start your Ubuntu WSL2 distribution.

wsl -d Ubuntu # Or your specific distro name

2. Stop the MariaDB Service

Before you can start MariaDB in safe mode, you must stop any currently running MariaDB services.

sudo systemctl stop mariadb

In some older WSL2 or minimal Ubuntu setups, systemctl might not be fully functional. If systemctl fails, you can try sudo service mariadb stop. However, systemctl is the standard for modern Ubuntu.

3. Start MariaDB in Safe Mode (Skip Grant Tables)

Now, start the MariaDB server process with the skip-grant-tables option. This will allow you to connect as root without a password. We'll use mysqld_safe as it provides a wrapper for mysqld and is often preferred for administrative tasks like this.

sudo mysqld_safe --skip-grant-tables &

The & puts the process in the background, allowing you to continue using the terminal. You might see some output regarding starting the daemon, which is normal.

While MariaDB is running with --skip-grant-tables, anyone with access to your WSL2 instance can connect to the database as root without a password. It is critical to proceed quickly and ensure no sensitive operations are performed while in this mode. Do not leave your server in this state longer than necessary.

4. Connect to MariaDB as Root

With MariaDB running in safe mode, you can now connect to the MySQL client as root without specifying a password.

mysql -u root

You should be granted immediate access to the MariaDB prompt (MariaDB [(none)]>).

5. Flush Privileges and Reset Password

Once connected, the first action you must take is to FLUSH PRIVILEGES;. This command reloads the grant tables into memory, allowing your subsequent ALTER USER command to take effect immediately, even though the server initially started without them.

Then, you can reset the root user's password. Replace YourNewStrongPasswordHere with a robust, unique password.

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPasswordHere';

The FLUSH PRIVILEGES; command is absolutely critical. Without it, the ALTER USER command might appear to succeed, but the changes won't be active, and you'll still be unable to log in with the new password after restarting the server.

Choose a strong, complex password that combines uppercase and lowercase letters, numbers, and special characters.

6. Exit MariaDB Client

Once the password has been reset, exit the MariaDB client.

exit;

7. Stop the MariaDB Safe Mode Process

Now you need to stop the mysqld_safe process that you started in step 3. First, find its Process ID (PID).

ps aux | grep mysqld_safe | grep -v grep

This command will output a line similar to this (the PID will vary):

root      12345  0.0  0.0  123456 12345 ?        S    HH:MM   0:00 /usr/bin/mysqld_safe --skip-grant-tables

Note down the PID (e.g., 12345 in the example above) and then kill the process:

sudo kill 12345 # Replace 12345 with the actual PID you found

It's essential to kill the mysqld_safe process properly before restarting the MariaDB service. If you don't, you might have multiple MariaDB instances running, leading to conflicts or unexpected behavior.

8. Restart MariaDB Service Normally

With the safe mode process terminated, you can now start the MariaDB service normally.

sudo systemctl start mariadb

9. Verify the New Password

Finally, test your new root password to ensure everything is working correctly.

mysql -u root -p

Enter your YourNewStrongPasswordHere when prompted. You should now be successfully logged into the MariaDB client.

Enter password: YourNewStrongPasswordHere
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 1234
Server version: 10.x.x-MariaDB-y Debian z

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> 

10. (Optional) Enhance Security

If you haven't done so already, or if you're concerned about other security aspects, consider running mysql_secure_installation. This script helps improve the security of your MariaDB installation by prompting you to set a root password, remove anonymous users, disallow remote root login, and remove the test database.

sudo mysql_secure_installation

You've successfully reset your MariaDB root password in your Windows WSL2 Ubuntu environment!

👨‍💻

Johnathon Wheeler

Senior Systems Architect & DevOps Engineer • Austin, TX

Connect on LinkedIn

Johnathon has over 16 years of hands-on experience designing, debugging, and scaling Linux web hosting stacks, container clusters, and high-availability database architectures. Every guide on ButItWorkedLocal is independently tested against Debian 12, Ubuntu 24.04/22.04 LTS, Rocky Linux, and Docker environments to guarantee reproducibility in production.

🛡️

Our Production Verification Guarantee

Encountering a bug not covered here or running a non-standard kernel configuration? Our solutions are continually refined against real production incidents. Submit an environment trace for our editorial team to replicate.