Как сбросить пароль root в MySQL 8 в Linux Ubuntu 20.10
Очень много времени потратил на поиск решения как же сменить/сбросить пароль в MySQL у пользователя root. Ничего не помогало, в том числе официальная документация по сбросу пароля. В процессе шло что-то не так и даже если команды какие-то выполнялись то результата нужного не получал.
Видимо преимущественно оказалось, что проблема была в том, что при выполнении команд из под сеанса пользователя система переназначает параметр socketpath.
Поэтому в первую очередь в файле конфигурации MySQL нужно прописать принудительно корректный путь до сокета.
Итак, перезапускаем MySQL
sudo service mysql restart
Выводим список сокетов и ищем где располагается mysqld.sock когда он запускается системой
sudo find / -type s
У меня он расположен в /run/mysqld/mysqld.sock
Открываем конфигурационный файл (мне удобнее через gedit, уж простите, можете использовать свой редактор)
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
Вставляете или заменяете параметр socket и сохраняете изменения
socket = /run/mysqld/mysqld.sock
Затем в терминале вводите команду
sudo mysqld_safe –skip-grant-tables &
После чего запускаем MySQL от пользователя root
sudo mysql
Откроется консоль, вбиваем команду и выполняем
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘newpassword’;
Все, смена пароля пользователя произведена. Можно писать exit и выходить из консоли.
Пробуйте зайти под пользователем
mysql -u root -p
Если система все еще не дает зайти – попробуйте пересоздать пользователя root.
Заходим под пользователем root под пользователем с полными правами
sudo mysql -u root
Удаляем пользователя root
DROP USER ‘root’@’localhost’;
Создаем нового пользователя с паролем newpassword
CREATE USER ‘root’@’%’ IDENTIFIED BY ‘newpassword’
Назначаем пользователю полные права
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;
Обновляем данные о правах пользователей
FLUSH PRIVILEGES;
Выходим из консоли MySQL через команду exit.
И пробуем залогиниться из под обычного пользователя
mysql -u root -p
Вбиваем пароль и вход должен закончиться успешно. Выходим в терминал командой exit.
Возможно, что можно просто где-то в правах разрешить пользователю root входить не из под суперпользователя, но у меня нет времени искать данное решение