Не удается сбросить пароль root с --skip-grant-tables на ubuntu 16

Я пытаюсь сбросить пароль root после MysqlPasswordReset но когда я пытаюсь запустить сервер с -- skip-grant-tables сервер не запускается

  • Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-59-generic x86_64)
  • MySQL Ver 14.14 дистрибутив 5.7.17, для Linux (x86_64)

сервер работает

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

остановить сервер

$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

попытка начать с -- пропустить-грант-таблицы

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856

подключение без пароля

$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[1]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking

Я также попытался начать с mysql_safe (ошибка.журнал пуст)

sudo mysqld_safe --skip-grant-tables
2017-02-01T16:33:31.382105Z mysqld_safe Logging to syslog.
2017-02-01T16:33:31.383942Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.386058Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.388009Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

3 ответов


я обнаружил, что mysql.носок удаляется, когда служба mysql остановлена, и mysqld_safe не может ее создать (я не мог найти причину), поэтому мое решение было резервное копирование папки sock и восстановление перед запуском mysqld_safe

запустить сервер

$ sudo service mysql start

перейти к папке носок

$ cd /var/run

назад носок

$ sudo cp -rp ./mysqld ./mysqld.bak

остановить сервер

$ sudo service mysql stop

восстановить носок

$ sudo mv ./mysqld.bak ./mysqld

старт mysqld_safe

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

Init MySQL shell

mysql -u root

смена пароля

FLUSH PRIVILEGES;

SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');

pedronalbert это ответ выше работал для меня, но последний шаг устарела и выдает следующее предупреждение:

Warning | 1287 / 'SET PASSWORD FOR = PASSWORD(")' устарел и будет удален в будущем выпуске. Пожалуйста, используйте SET PASSWORD FOR = " вместо

вместо этого используйте эту команду:

SET PASSWORD FOR root = '<plaintext_password>';

Я пробовал много способов, включая @pedronalbert, но все еще не работает.

то, как я решил это, добавляет"пропустить-грант-столы" в / etc / my.cnf затем запустите службу mysql и подключите mysql с "в mysql -u в корень " as https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html

Он работает в моем VM CentOS 7.