не вдається скинути кореневий пароль mysql


28

Мені потрібно скинути кореневий пароль моєї локальної установки 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, як тільки я його вбиваю ...

Відповіді:


43

Спочатку спробуйте скористатися

mysql -u root -p

і введіть свій пароль (якщо ви пам’ятаєте) під запитом на вхід як користувач sql-root (зверніть увагу, що перемикач -pпризначений для пароля).

Якщо вам дійсно доведеться скинути свій кореневий пароль для 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). Це зупинить демона бази даних. Після цього з'явиться підказка, де потрібно було б ввести новий пароль і підтвердити конфігурацію.

    оснащення1

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

  3. Потім ви можете увійти за допомогою:

    mysql -u root -p
    

    і запустити завдання адміністратора вашої бази даних.

Список літератури:

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

  2. Посібник з сервера Ubuntu, що стосується вашої конкретної версії.


2
Можна підтвердити, що dpkg-reconfigure mariadb-server-10.1працювали для MariaDB, коли всі інші рішення цього не зробили. Дякую за це.
liviucmg

19
dpkg-reconfigureне запропонував мені пароль. Чи є спосіб його змусити?
Уніргія

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

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 без кореневого пароля, звір нападе на вас, і ви втратите 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>

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? Я ніколи раніше не стикався з усіма цими проблемами з оновленням паролів.
Честер

@Chester дуже дякую !! Це був єдиний спосіб, який нарешті спрацював зараз, оскільки всі інші рішення припускають помилку. (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), і це було єдиним рішенням для мого випадку.
cherouvim

Я отримую повідомлення: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опції та побачите, як це рішення працює.
Барун

@Barun, ні, без --skip-grant-tablesопції я навіть не можу увійти в MySQL як root. У ньому написаноERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149

Вирішено! Мені довелося увійти в звичайну консоль MySQL (не mysqld_safe) як root без пароля. У мене є Ubuntu 18.04 і mysql-сервер-5.7. Ця відповідь допомогла мені askubuntu.com/a/767252/585252 (див. Нижню частину)
користувач2513149

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

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

1
Це єдиний рада, який працює для мене з шести пропозицій, які я спробував, але я додав трохи вище @Chester, щоб уникнути помилки "Файл сокетів UNIX не існує": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldце на mysql 5.7 та ubuntu 18.04 .
двоколісник

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.