Hay tantas respuestas que dicen reinstalar mysql o usar alguna combinación de
mysqld_safe --skip-grant-tables
y/o
UPDATE mysql.user SET Password=PASSWORD('password')
y/o algo más...
... Nada de eso funcionó para mí
Esto es lo que funcionó para mí, en Ubuntu 18.04, desde arriba
Con crédito especial para este responder por sacarme de la frustración sobre esto...
$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf
Tenga en cuenta las líneas que dicen:
user = debian-sys-maint
password = blahblahblah
Entonces:
$ mysql -u debian-sys-maint -p
Enter password: // type 'blahblahblah', ie. password from debian.cnf
mysql> USE mysql
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> COMMIT; // When you don't have auto-commit switched on
O bien:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
O:
// For MySQL 5.7+
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';
Entonces:
mysql> FLUSH PRIVILEGES;
mysql> COMMIT; // When you don't have auto-commit switched on
mysql> EXIT
$ sudo service mysql restart
$ mysql -u root -p
Enter password: // Yay! 'new_password' now works!