Access denied for user ‘root’@‘localhost’ from MySQL or MariaDB rarely means a wrong password. On a modern default install, root does not use a password at all — it authenticates by operating-system identity through the auth_socket (MySQL) or unix_socket (MariaDB) plugin. So the wrong method is the problem, not the wrong secret.
The fix that usually just works
Connect as the OS root user and the socket plugin lets you in with no password:
sudo mysql
# or
sudo mariadbIf that works, everything is fine — you were simply running mysql -u root -p and typing a password the server was not checking for.
Do not give apps the root account
The right pattern is a dedicated user per application, never root. Inside the shell:
CREATE DATABASE appdb;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'a-strong-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;If you really need a password on root
For tooling that cannot use the socket, switch root to password auth explicitly:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new-password';
FLUSH PRIVILEGES;sudo mariadb
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('new-password');
FLUSH PRIVILEGES;Locked out completely: reset via safe mode
If the socket route is gone and you have no password, reset it by starting the server with authentication skipped:
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
# then inside:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';
# stop safe mode and start normally
sudo systemctl start mysqlA different denial: remote connections
Access denied … @‘10.0.0.5’ (not localhost) means the user exists but not for that host, or the server only listens locally. Grant the host explicitly and check bind-address — but never expose the database straight to the internet; tunnel over SSH or restrict it to a private network.
A managed database benefits from fast, consistent storage. VMHeaven’s Hi-CPU KVM plans pair high-frequency cores with NVMe, which is exactly what a transactional MySQL workload wants.
Frequently asked
Why does 'sudo mysql' work but 'mysql -u root -p' does not?
The default root account uses the auth_socket/unix_socket plugin — it authenticates by your OS user, not a password. Connect as OS root with 'sudo mysql'.
How do I give root a password?
Inside the shell run ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new-password' (MySQL 8) and FLUSH PRIVILEGES. But prefer a dedicated app user over root.
I am locked out completely — how do I reset root?
Start the server with --skip-grant-tables --skip-networking, connect, FLUSH PRIVILEGES, ALTER the root password, then restart normally. Keep the window short.