Solución:
Descubrí que mysql.sock se elimina cuando se detiene el servicio mysql y mysqld_safe no puede crearlo (no pude encontrar el motivo), por lo que mi solución fue hacer una copia de seguridad de la carpeta sock y restaurar antes de iniciar mysqld_safe
Iniciar servidor
$ sudo service mysql start
Ir a la carpeta de calcetines
$ cd /var/run
Copia de seguridad del calcetín
$ sudo cp -rp ./mysqld ./mysqld.bak
Detener servidor
$ sudo service mysql stop
Restaurar el calcetín
$ sudo mv ./mysqld.bak ./mysqld
Inicie mysqld_safe
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Iniciar shell mysql
mysql -u root
Cambiar la contraseña
FLUSH PRIVILEGES;
SET PASSWORD FOR [email protected]'localhost' = PASSWORD('my_new_password');
Para Ubuntu 19 con MySQL 8.0.17-0ubuntu2, lo que terminó funcionando para mí fue una combinación de muchas respuestas:
-
En el archivo de configuración de MySQL (
/etc/mysql/mysql.conf.d/mysqld.cnf
en mi máquina), debajo[mysqld]
, agregar:skip-grant-tables = 1
plugin-load-add = auth_socket.so -
Reinicie el servicio MySQL;
-
Conéctese a MySQL:
mysql -uroot
; -
Correr:
UPDATE mysql.user SET authentication_string=null WHERE User="root"; FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';
-
Detenga MySQL y comente
skip-grant-tables
en el archivo de configuración; -
Inicie MySQL nuevamente y esto debería funcionar ahora:
mysql -u root -ppass123
.
La respuesta de pedronalbert anterior funcionó para mí, pero el último paso ahora está en desuso y arroja la siguiente advertencia:
Advertencia | 1287 | ‘SET PASSWORD FOR = PASSWORD (‘ ‘)’ está obsoleto y se eliminará en una versión futura. Utilice SET PASSWORD FOR = ” en su lugar
Utilice este comando en su lugar:
SET PASSWORD FOR root="<plaintext_password>";