MySQL 5.7 cambió el modelo seguro:ahora el inicio de sesión raíz de MySQL requiere un sudo
La solución más simple (y segura) será crear un nuevo usuario y otorgarle los privilegios requeridos.
sudo mysql --user=root mysql
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Referencia:https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7
El servidor MySQL 5.7 ya estaba instalado de forma predeterminada en mi nuevo Linux Mint 19.
Pero, ¿qué es MySQL root
? ¿clave? Resulta que:
La instalación predeterminada usa auth_socket
para autenticación, en lugar de contraseñas!
Permite un inicio de sesión sin contraseña, siempre que se haya iniciado sesión en el sistema Linux con el mismo nombre de usuario. Para iniciar sesión como raíz de MySQL user
, uno puede usar sudo:
sudo mysql --user=root
Pero, ¿cómo cambiar la contraseña de root? Para ilustrar lo que está pasando, creé un nuevo usuario "yo", con todos los privilegios, con:
mysql> CREATE USER 'me'@'localhost' IDENTIFIED BY 'my_new_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'me'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Comparando "yo" con "raíz":
mysql> SELECT user, plugin, HEX(authentication_string) FROM mysql.user WHERE user = 'me' or user = 'root';
+------+-----------------------+----------------------------------------------------------------------------+
| user | plugin | HEX(authentication_string) |
+------+-----------------------+----------------------------------------------------------------------------+
| root | auth_socket | |
| me | mysql_native_password | 2A393846353030304545453239394634323734333139354241344642413245373537313... |
+------+-----------------------+----------------------------------------------------------------------------+
Debido a que está usando auth_socket, la contraseña de root no se puede cambiar:el SET PASSWORD
el comando falla y mysql_secure_installation
no ha logrado nada...
==> Para eliminar este modo de autenticación alternativo y devolver MySQL root
usuario para usar contraseñas:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SOME_NEW_ROOT_PASSWORD';
Una buena explicación.
Más detalles del manual de MySQL.
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 esta respuesta por sacarme de la frustración en este...
$ 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!
Después de instalar MySQL-community-server 5.7 desde cero en Linux, deberá encontrar la contraseña temporal de /var/log/mysqld.log para iniciar sesión como root.
grep 'temporary password' /var/log/mysqld.log
- Ejecutar
mysql_secure_installation
para cambiar la nueva contraseña
referencia:http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html