Вопрос по mysql, passwords – Сброс корневого пароля MySQL, если текущий пароль неизвестен

18

Я унаследовал сервер, на котором установлен mysql. У меня нет пароля mysql для любого пользователя, даже для пользователя root (хотя у меня есть пароль root для Linux). Кроме того, мне известно только об одной другой учетной записи пользователя root, и что у нее нет привилегий для выполнения каких-либо действий, даже SELECT.

Я попытался остановить mysql servicw, перезапустить с опцией пропустить таблицы предоставления и просто войти без пароля:

<code>service mysqld stop
service mysqld start --skip-grant-tables &
mysql -u root
</code>

Но получите следующую ошибку:

<code>Access denied for user 'root'@'localhost' (using password: NO)
</code>

Затем я попытался сбросить пароль:

<code>mysqladmin -u root password 'newpw'
</code>

Но это также дает ошибку отказа в доступе.

Я также попытался войти в систему как другой пользователь (без pw) и выполнить следующую команду:

<code>UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
</code>

и получил эту ошибку:

<code>ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'
</code>

Я также попытался удалить MySQL и переустановить, но я получаю те же ошибки.

Какие-либо предложения?

Пытатьсяthese instructions из руководства. Michael Mior
Этот вопрос действительно принадлежитDatabase Administrators или жеSuper User, не так. eggyal
Обратите внимание, что если вы хотите использовать--skip-grant-tables вам может понадобиться начатьmysqld непосредственно, поскольку параметры не обязательно передаются через сценарий инициализации. Michael Mior
@Michael Mior: Вы хотите опубликовать ответ, чтобы я мог выбрать его как правильный и дать вам ответ? Bad Programmer
@Michael Mior: Спасибо, снова заработал! Bad Programmer

Ваш Ответ

6   ответов
2

`UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;

Запишите операторы UPDATE и FLUSH в одной строке. Оператор UPDATE сбрасывает пароль для всех корневых учетных записей, а оператор FLUSH сообщает серверу перезагрузить таблицы предоставления в память, чтобы он заметил изменение пароля.

3

Вы должны убедиться, что вы запускаете команду от имени пользователя root с помощью команды sudo.

я нашел этоинструкция для сброса пароля mysql работает хорошо.

Следуя этой процедуре, вы отключите контроль доступа на сервере MySQL. Все соединения будут иметь root-доступ. Хорошо отключить сервер от сети или хотя бы отключить удаленный доступ.

Чтобы сбросить пароль mysqld, просто следуйте этим инструкциям:

Stop the mysql demon process using this command :

       sudo /etc/init.d/mysql stop

Start the mysqld demon process using the --skip-grant-tables option with this command

       sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Поскольку в этот момент вы не проверяете привилегии пользователей, безопаснее всего отключить работу сети. В Dapper / usr / bin / mysqld ... не работал. Однако, mysqld --skip-grant-tables сделал.

start the mysql client process using this command

       mysql -u root

from the mysql prompt execute this command to be able to change any password

       FLUSH PRIVILEGES;

Then reset/update your password

       SET PASSWORD FOR [email protected]'localhost' = PASSWORD('password');

If you have a mysql root account that can connect from everywhere, you should also do:

       UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

Alternate Method:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = 'localhost' AND User = 'root';

And if you have a root account that can access from everywhere:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = '%' AND User = 'root';

Для любого метода, получив сообщение об успешном запросе (одна или несколько строк затронуты), сбросьте права:

ПРИВИЛЕГИИ ПРОМЫВКИ;

Затем остановите процесс mysqld и перезапустите его классическим способом:

sudo /etc/init.d/mysql stop

sudo /etc/init.d/mysql start

7

Два варианта:

Если вы хотите использовать --skip-grant-tables, вам может потребоваться запустить mysqld напрямую, поскольку параметры не обязательно передаются через скрипт инициализации.

В противном случае попробуйтеэти инструкции из руководства.

0

Для mysql 5.7.16 на Ubuntu 16.04 это работает:

  • login without password:

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

  • change password:

    SET PASSWORD FOR 'root'@'localhost' = 'mypass';

Нашел решение наСправочное руководство по MySQL 5.7

-1

В моем случае происходило то же самое, но я делал ошибку при входе в MySQL приглашение. Я делал mysql вместо mysql -u root -p

34

пытатьсяsudo dpkg-reconfigure mysql-server-5.5 и вам будет предложено ввести новый пароль root.

Замените 5.5 текущей версией mysql-сервера

Это то, что я использовал, и это сработало
Не будет работать для установки пароля без пароля. В этом случае установите любой пароль, войдите в MySQL иSET PASSWORD FOR [email protected]=PASSWORD('');
Самый удобный, быстрый и элегантный способ, похожий на Debian. Работает как шарм

Похожие вопросы