Назад | Перейти на главную страницу

Как сбросить или восстановить пароль учетной записи администратора для MySQL?

У меня есть база данных MySQL, которую я «унаследовал», и мне не дали учетные данные администратора. Однако у меня есть доступ к коробке, на которой он работает. Есть ли способ восстановить учетные данные администратора или создать новые?

Прочтите и выполните глава о сбросе пароля root в Справочном руководстве MySQL.

Эта процедура запускает демон mysql без авторизации, позволяя вам подключаться без предоставления учетных данных. В этом режиме вы можете нормально подключаться, а также сбрасывать пароли и разрешения. После этого не забудьте снова запустить mysql с соответствующей авторизацией.

Если это ящик Debian / Ubuntu, существует специальная учетная запись, эквивалентная root, которая называется debian-sys-maint. Вы можете прочитать пароль в /etc/mysql/debian.cnf

Используя этот пароль, вы можете войти в mysql как debian-sys-maint, используя:

mysql --defaults-file=/etc/mysql/debian.cnf mysql

После входа в систему сделайте следующее:

update user set password=password('<new password>') where user='root';
flush privileges;
quit;

Теперь root должен быть доступен с вашим новым паролем:

mysql -uroot -p

Мой пользователь root не существует. На

CREATE USER root@localhost;

я получил

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

Решение было

mysqld_safe  --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

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

mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N

(а этот можно и нужно автоматизировать больше)

Примечание: поиск правильного количества Y в INSERT это PITA.

Как наступает на Справочное руководство по MySQL не очень понятны, я пытаюсь ответить здесь более простым языком. (этот ответ актуален для пользователей MacBook OSX):

  1. Поскольку мы не знаем текущий пароль, сервер MySQL должен работать с пропуском / обходом текущих учетных данных для входа. Укажите серверу MySQL пропустить таблицу разрешений доступа:
    • Остановите свой сервер MySQL (если он уже запущен).
    • Найдите свой файл конфигурации MySQL, my.cnf. (Для меня это было помещено @ /Applications/XAMPP/xamppfiles/etc. Вы можете просто поискать, если не можете его найти).
    • открыто my.cnf файл в любом текстовом редакторе.
    • Добавить "skip-grant-tables" (без кавычек) в конце [mysqld] раздел и сохраните файл.
    • Теперь запустите свой сервер MySQL. Это начнется с skip-grant-tables вариант.
  2. открыто Terminal и беги mysql команда
  3. Выполнить команду mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Выполнить команду mysql> FLUSH PRIVILEGES;
  5. Выполнить команду mysql> exit
  6. Перезагрузите сервер MySQL.