не удалось сбросить пароль root mysql

Мне нужно сбросить пароль 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

Как я могу получить сброс пароля? edit 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, как только я его убью ...

1
задан 28 June 2014 в 09:40

5 ответов

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

Шаг 1. Остановка службы MySQL.

sudo service mysql stop

Шаг 2: Убейте все запущенные mysqld.

sudo killall -9 mysqld
[d4 ] Шаг 3: Запуск mysqld в безопасном режиме.

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

Шаг 4: Запустите mysql client

mysql -u root

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

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

16
ответ дан 24 May 2018 в 06:13
  • 1
    должен быть sudo service mysql stop, а не sudo stop mysql – knocte 4 July 2016 в 06:51
  • 2
    Кроме того, в конце он пропускает шаги sudo killall mysqld_safe && sudo service mysql start, а затем пытается снова войти в систему – knocte 4 July 2016 в 06:58
  • 3
    Для MYSQL 5.7 синтаксис пароля изменения изменился на ALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE' – Tarek Fadel 6 July 2016 в 10:55
  • 4
    Примечание ! В MySQL 5.7 есть новый зверь, называемый auth_socket. Если вы устанавливаете mysql без пароля root, зверь атакует вас, и вы потеряете 50 hitpoints. На шаге 6 выше вам нужно ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Вы можете прочитать об этом здесь . Теоретически (я не пробовал), вы должны иметь возможность войти в mysql без пароля, если вы «sudo su - " стать root. – olafure 13 October 2016 в 16:14
  • 5
    И в случае, если ALTER USER ... не работает, используйте UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; – olafure 13 October 2016 в 17:04

В 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

[ f2]

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

sudo killall mysqld
sudo service mysql start

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

mysql -u root -p
Enter password: newpass
mysql>
9
ответ дан 24 May 2018 в 06:13
  • 1
    При выполнении 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? Я никогда не испытывал все эти проблемы, обновляя пароли раньше. – Chester 3 April 2017 в 00:07
  • 2
    @Chester большое спасибо! Это был единственный способ, который, наконец, работал теперь, когда все другие решения вызывают ошибку. (Ubuntu-Server 16.04 здесь) Это должно быть добавлено к ответу – derHugo 30 May 2017 в 09:48

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

Правильный способ смены пароля будет: [ ! d2]

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/ [!d3 ]

2
ответ дан 24 May 2018 в 06:13
  • 1
    Это был мой точный случай (пустой пароль во время установки в mysql 5.7), и это было единственным решением для моего дела. – cherouvim 19 April 2017 в 10:06

Создайте файл с помощью этого:

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 / ен / сброс-permissions.html

0
ответ дан 24 May 2018 в 06:13

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

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
0
ответ дан 24 May 2018 в 06:13
  • 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. – derHugo 30 May 2017 в 09:34

Другие вопросы по тегам:

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