it-swarm.com.ru

Не могу сбросить пароль 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 Distrib 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.

Попытка начать с --skip-grant-tables

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 (error.log пуст)

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.
28
pedronalbert

Я обнаружил, что mysql.sock удаляется, когда служба 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 [email protected]'localhost' = PASSWORD('my_new_password');
83
pedronalbert

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

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

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

SET PASSWORD FOR root = '<plaintext_password>';
5
auhsor

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

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

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

1
gevge