невозможно восстановить пароль root в MySQL

28

Мне нужно сбросить пароль root моей локальной установки mysql, но это не позволит мне. Я пробовал это:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

Как я могу получить сброс пароля? изменить 1 я получил это:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

похоже, что процесс автоматически перезапускает mysql, как только я его убью ...

stdcerr
источник

Ответы:

43

Сначала попробуйте использовать

mysql -u root -p

и введите свой пароль (если вы помните) в ответ на приглашение войти в систему как пользователь sql-root (обратите внимание, что переключатель -pпредназначен для пароля).

Если вам действительно нужно сбросить пароль root для mysql, вот простой способ - перенастроить пакет с помощью dpkg-reconfigure.

Простые шаги для сброса пароля root в MySQL:

  1. Проверьте версию своего mysql-server;

    apt-cache policy mysql-server
    

    и посмотрите на строку, которая показывает установленную версию среди другой информации. например, для моей установки это:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Из этого я знаю, что я mysql-server-5.5установил в моей системе.)

  2. Начать реконфигурацию с:

    sudo dpkg-reconfigure mysql-server-*.*
    

    где mysql-server-*.*должна быть заменена версия, которая у вас есть. (для меня это будет mysql-server-5.5). Это остановит демон базы данных. Появится запрос, где вам нужно будет ввести новый пароль и подтвердить перенастройку.

    SNAP1

    Демон будет автоматически запущен после завершения перенастройки.

  3. Затем вы можете войти с помощью:

    mysql -u root -p
    

    и запустите ваши задачи администратора базы данных.

Ссылки:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [который вскоре будет очищен, как указано на странице.]

  2. Руководство по Ubuntu Server, относящееся к вашей конкретной версии.

точный
источник
2
Могу подтвердить, что dpkg-reconfigure mariadb-server-10.1работало на MariaDB, когда все остальные решения не работали. Спасибо тебе за это.
liviucmg
19
dpkg-reconfigureне запрашивал пароль для меня .. есть ли способ заставить его?
Unirgy
15
Не работал для меня. Я использовал команду, описанную выше, и получил «Проверка необходимости обновления. Эта установка MySQL уже обновлена ​​до 5.7.13, используйте --force, если вам все еще нужно запустить mysql_upgrade». Использование --force дало тот же ответ.
Энтони Скайф,
5
Видимо, это больше не работает.
dpi
1
@Paulo Henrique Нет. Учитывая ситуацию, мы решили, что наилучшим использованием нашего времени была полная переустановка сервера.
Энтони
21

Ссылка взята из этого блога:

Шаг 1: остановите службу MySQL.

sudo service mysql stop

Шаг 2: Убить всех работающих mysqld.

sudo killall -9 mysqld

Шаг 3: Запуск mysqld в безопасном режиме.

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

Шаг 4: Запустите клиент MySQL

mysql -u root

Шаг 5: После успешного входа в систему, пожалуйста, выполните эту команду, чтобы изменить любой пароль.

FLUSH PRIVILEGES;

Шаг 6: Вы можете обновить пароль root для mysql.

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

для mysql> 5.7 используйте это вместо вышеупомянутого:

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

Шаг 7: Пожалуйста, выполните эту команду.

FLUSH PRIVILEGES;

Шаг 8: Выход из консоли MySQL

exit

Шаг 9: убить mysqld_safe и запустить mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
источник
1
должно быть sudo service mysql stop, неsudo stop mysql
knocte
1
также, в конце он пропускает шаги sudo killall mysqld_safe && sudo service mysql startи затем пытается войти снова
knocte
3
Для MYSQL 5.7 синтаксис смены пароля был изменен наALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Тарек Фадель
7
ПРИМЕЧАНИЕ ! В MySQL 5.7 появился новый зверь с именем auth_socket. Если вы установите mysql без пароля root, зверь нападет на вас, и вы потеряете 50 хитпоинтов. На шаге 6 выше вам нужно ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Вы можете прочитать об этом здесь . Теоретически (я не пробовал), вы должны иметь возможность войти в MySQL без пароля, если вы "sudo su -", чтобы стать пользователем root.
olafure
3
И в случае, если ALTER USER ...не работает, используйтеUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

Под Ubuntu 16.04 и mysql-server-5.7, правильный ответ - последний комментарий olafure, dpkg-reconfigure mysql-server-5.7больше не работает.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Теперь в консоли MySQL >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Перезапустите хороший mysql процесс

sudo killall mysqld
sudo service mysql start

Проверьте свой новый пароль

mysql -u root -p
Enter password: newpass
mysql>
Пьер-Damien
источник
5
При mysqld_safeисполнении я получаю ошибку: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Итак, я побежал, sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldи остальная часть ответа выше работает. Это ошибка в Ubuntu 16? Я никогда не сталкивался со всеми этими проблемами при обновлении паролей.
Честер
@ Честер большое спасибо !! Это был единственный способ, который наконец-то сработал, так как все другие решения выдают ошибку (Ubuntu-Server 16.04 здесь) Это должно быть добавлено к ответу
derHugo
3

Начиная с MySQL 5.7 , при первоначальной установке, если вы оставите пароль пустым, то для этого пользователя аутентификация будет основана на auth_socketплагине.

Правильный способ изменить пароль будет:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Барун
источник
Это был мой точный случай (пустой пароль во время установки в MySQL 5.7), и это было единственным решением для моего случая.
Черувим
Я получаю сообщение:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Пожалуйста, перезапустите сервер MySQL без --skip-grant-tablesопции, и вы увидите, что это решение работает.
Барун
@ Барун, нет, без --skip-grant-tablesопции я не могу даже войти в MySQL как root. Это говоритERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Решено! Я должен был войти в обычную консоль MySQL (не mysqld_safe) как root без пароля. У меня Ubuntu 18.04 и mysql-server-5.7. Этот ответ помог мне askubuntu.com/a/767252/585252 (см. Нижнюю часть)
user2513149
1

Ничто из остальных ответов, казалось, не сработало для меня. Это мое решение:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Там есть:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Затем:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
источник
1
Остальное не работает ни на меня, ни на ваше решение, к сожалению: все еще 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
появляется
1
Это единственный совет, который работает для меня из шести или около того предложений, которые я попробовал, но я добавил бит @Chester выше, чтобы избежать ошибки «Файл сокета UNIX не существует»: sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldэто на mysql 5.7 и ubuntu 18.04 ,
Twowheeler
0

Создайте файл с этим:

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

Остановите сервер MySQL и запустите это:

mysqld_safe --init-file=/home/me/mysql-init &

Проверьте здесь для более подробной информации: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Эльер
источник