Зміна кореневого пароля MySQL


95

Я намагався скинути свій кореневий пароль MySQL. Я запустив mysqld_safe --skip-grant-tables, оновив кореневий пароль і перевірив таблицю користувачів, щоб переконатися, що вона є. Після перезапуску демона mysql я спробував увійти в систему за допомогою нового кореневого пароля, який я щойно встановив, і все ще отримую відмову в доступі через помилки користувача "root". Я також спробував повністю видалити та перевстановити mysql (включаючи видалення файлу my.cnf), і мені все одно не пощастило. Хтось має якісь пропозиції щодо того, що я можу робити далі?

Спасибі заздалегідь


2
будь ласка, опублікуйте свою фактичну помилку
Vishwanath Dalvi

16
Якщо ваш незаблокований SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); найбезпечніший.
sabgenton

Я дотримувався кроків у відео, щоб змінити пароль на одному зі своїх серверів youtu.be/gFo5DV_pSg8
Прем

Можливий дублікат ПОМИЛКИ 1698 (28000):
Заборонено

1
Версія сервера: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) ПОМИЛКА 1064 (42000): у вас є помилка в синтаксисі SQL; перевірте інструкцію, яка відповідає версії вашого сервера MySQL, на правильний синтаксис, який слід використовувати біля 'PASSWORD ("1")' у рядку 1 ВСТАНОВИТИ ПАРОЛЬ ДЛЯ 'root' @ 'localhost' = PASSWORD ("somepassword");
discipleartem

Відповіді:


123

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


7
Це працює для мене в 5.7, тоді як прийнята відповідь - ні.
Stoopkid

2
Це правильне рішення, якщо для кореневого пароля MySQL встановлено порожнє значення.
fschuindt

3
> ОНОВИТИ mysql.user ВСТАНОВИТИ authentication_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > ПРИВИЛЕГІЇ ПРОМИВАННЯ; У MySQL версії 5.7.x у таблиці mysql більше немає поля пароля. Його замінили на authentication_string.
Роберт Ентоні С. Трібіана,

2
Це дає мені право, але насправді нічого не робіть
Freedo

1
Йому потрібна додаткова команда FLUSH PRIVILEGESдля ефективного внесення змін без перезапуску сервера бази даних.
NetVicious

60

подивіться на це в довідковому посібнику MySQL:

Перший логін mysql:

# mysql -u root -p

Потім у підказці mysql запустіть:

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

Тоді

FLUSH PRIVILEGES;

Перегляньте цю сторінку для отримання додаткової інформації: Скидання пароля користувача: Unix Systems


Я отримав повідомлення про помилку "Ви використовуєте безпечний режим оновлення та намагалися оновити таблицю без ДЕ, де використовується стовпець KEY ..." під час оновлення пароля користувача. Дивіться stackoverflow.com/questions/11448068/… про те, як обійти цю помилку.
Джо Борисько

ПОМИЛКА 1064 (42000): у вашому синтаксисі SQL є помилка; перевірте інструкцію, яка відповідає вашій версії сервера MySQL, на правильний синтаксис для використання біля '(' MyNewPass ') WHERE User =' root '' у рядку 1
discipleartem

28
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Ви можете знайти Скидання кореневого пароля в документації MySQL.


Цей запит працює для мене, але новий пароль не працює (доступ відмовлено). Це починає працювати лише після того, як я відтворив кореневого користувача askubuntu.com/a/784347/160368 .
hlcs

1
працює для мене на MySQL 8.0.20 і після ініціалізації папки даних за допомогою цієї командиmysqld --initialize --console
А. Хентеті

27

Це оновлена ​​відповідь для WAMP v3.0.6 та новіших версій

> UPDATE mysql.user 
> SET authentication_string=PASSWORD('MyNewPass') 
> WHERE user='root';

> FLUSH PRIVILEGES;

У MySQL версії 5.7.x у таблиці mysql більше немає поля пароля. Його замінили на authentication_string. (Це для терміналу / CLI)

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

FLUSH PRIVILEGES;

(Це якщо для PHPMyAdmin або будь-якого графічного інтерфейсу Mysql)


Ця відповідь є однією з небагатьох, хто каже, що mysql.userтаблицю слід оновлювати. Зверніть увагу, що якщо ви використовуєте будь-яку іншу базу даних (встановлену useкомандою), ви отримаєте повідомлення про помилку, що таблиця userне існує. Дякую вам сер!
Олександр

1
працює для мене. Я використовую 5.7.x, mysql.userтаблиці немає . інші відповіді застарілі
Siwei Shen 申思维

Раді допомогти !!
Роберт Ентоні С. Трібіана

Я відкочую його назад, тому що це маю намір використовувати> через крапку з комою на рядок, призначену для терміналу
Роберт Ентоні С. Трібіана,

0 рядків, що вплинули, рядки відповідають: 3 змінено: 0 ...?
trainoasis

22

Знайшов це! Я забув хеш-пароль, коли змінив його. Я використав цей запит для вирішення своєї проблеми:

update user set password=PASSWORD('NEW PASSWORD') where user='root';

Я забув PASSWORD('NEW PASSWORD')і просто ввів новий пароль у звичайному тексті


обов’язково поверніться і прийми свою відповідь, щоб дозволити іншим побачити рішення
ghostJago

1
dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html показує, як це зробити, --init-file=якщо ви звернули увагу.
sabgenton

3
Будь-яка ідея, чому коли я використовую ту саму команду, повертається така помилка? Помилка 1054 (42S22): невідомий стовпець 'Пароль' у 'списку полів'
Адріан М.

1
У вас є помилка у вашому синтаксисі SQL; перевірте інструкцію, яка відповідає вашій версії сервера MySQL, на правильний синтаксис для використання біля '(' НОВИЙ ПАРОЛЬ ') де user =' root '' у рядку 1
discipleartem

20

Будь ласка, дотримуйтесь наведених нижче кроків.

крок 1. зупинити mysql

крок2. sudo mysqld_safe --skip-grant-tables

крок 3.mysql -u root

крок4.use mysql;

крок5.show tables;

крок6.describe user;

крок7.update user set authentication_string=password('1111') where user='root';

логін з паролем 1111


3
flush privilegesважливо як останній крок.
Хом Назід

Це дійсно зроблено з дупою. Я зробив усі підручники, щоб скинути пароль. Все працює, крім випадків, коли я входжу з новим паролем, це не працює.
Shidomaru NeveRage

якщо mysqld не запускається і повідомляє, як цей демон mysqld, з базами даних з / var / lib / mysql mysqld_safe mysqld з pid-файлу /var/run/mysqld/mysqld.pid закінчився, зробіть це: mkdir / var / run / mysqld chomod 777 / var / run / mysqld і починайте все з жебрацтва
jokermt235

18

Я також шукав навколо, і, мабуть, деякі відповіді підходять для деяких ситуацій,

моя ситуація - Mysql 5.7 в системі LTS Ubuntu 18.04.2:

(отримати привілеї root)

$ sudo bash

(встановити пароль для користувача root db + впровадити безпеку за кроками)

# mysql_secure_installation

(надати доступ кореневому користувачеві за допомогою пароля замість сокета)

(+ редагувати: мабуть, вам потрібно знову встановити пароль?)

(не встановлюйте його як 'mySecretPassword' !!!)

# mysql -u root

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword'); 
mysql> FLUSH PRIVILEGES;
mysql> exit;

# service mysql restart

Велике спасибі zetacu (та erich ) за цю чудову відповідь (після пошуку через пару годин ...)

Насолоджуйтесь :-D

С.


Це найкраща відповідь на даний момент, принаймні для сервера mysql 5.7.
Золтан Хайду,

НАЙКРАЩА відповідь. Дякую.
Лучано Фантуцці

11

На MySQL 8.0.4+

Щоб оновити поточного кореневого користувача:

select current_user();
set password = 'new_password';

Щоб оновити іншого користувача:

set password for 'otherUser'@'localhost' = 'new_password';

Щоб встановити політику щодо паролів перед оновленням пароля:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

Інший / кращий спосіб оновлення пароля root:

mysql_secure_installation

Хочете дотримуватися автентифікації 5.x, щоб ви все ще могли користуватися застарілими програмами?

Увімкнено my.cnf

default_authentication_plugin = mysql_native_password

Щоб оновити root:

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';

7

Це спрацювало для мене -

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html


ПОМИЛКА 1064 (42000): у вашому синтаксисі SQL є помилка; перевірте посібник, який відповідає вашій версії сервера MySQL, на правильний синтаксис для використання поблизу "ІДЕНТИФІЦОВАНО" MyNewPass "на рядку 1
trainoasis

Просто скопіював точний
надпис

Звичайно, киньте на мій сервер + mysql -u root -p, щоб дістатися до mysql cli
trainoasis

6

Ви повинні скинути пароль! кроки для mac osx (перевірено та працює) та ubuntu

Зупиніть MySQL

$ sudo /usr/local/mysql/support-files/mysql.server stop

Запустіть його в безпечному режимі:

$ sudo mysqld_safe --skip-grant-tables

(у верхньому рядку - вся команда)

Це буде постійною командою, поки процес не буде закінчений, тому відкрийте інше вікно оболонки / терміналу, увійдіть без пароля:

$ mysql -u root

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

Запустіть MySQL

sudo /usr/local/mysql/support-files/mysql.server start

ваш новий пароль - "пароль".


Я отримав повідомлення: не вибрано жодної бази даних
Мімун

@Mimouni спробувати це: stackoverflow.com/questions/21944936 / ...
tk_

5

Для MySQL 5.7.6 та новіших версій:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Для MySQL 5.7.5 і раніше:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

3

Для останньої останньої версії mysql (8.0.16) жодна з цих відповідей не спрацювала для мене.

Переглянувши кілька різних відповідей та поєднавши їх разом, ось що я в підсумку використав, що спрацювало:

update user set authentication_string='test' where user='root';

Сподіваюся, це допомагає.


2

типовою помилкою, з якою я стикаюся час від часу, є те, що я забуваю цю -pопцію, тож ви впевнені, що використовували:

mysql -u root -p

2

У MySQL 5.7 пароль замінюється на 'authentication_string'.

використання

update user set authentication_string=password('myfavpassword') where user='root';

2

Використання утиліти командного рядка mysqladmin для зміни пароля MySQL:

mysqladmin --user=root --password=oldpassword password "newpassword"

Джерело


1

Спробував відповідь від @kta, але мені не вдалося.

Я використовую MySQL 8.0

Це працювало для мене:

mysql> SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'


1
Будь ласка, додайте пояснення до свого коду - як саме це вирішує семирічне питання?
Ніко Хаасе

Схоже, синтаксис змінювався протягом семи років. Це не обгортання пароля паролем () dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu

Пароль хеш повинен бути 41-значний шістнадцятковий номер
Мімун

1

Так багато коментарів, але мені допомогли цей метод:

sudo mysqladmin -u root password 'my password'

У моєму випадку після інсталяції я отримав службу mysql без пароля для кореневого користувача, і мені потрібно було встановити пароль для моєї безпеки.


Він може бути використаний для скидання пароля користувача root MySQL, не знаючи старого. Але переконайтеся, що ніхто не має доступу до вашого системного журналу, оскільки цей пароль зареєстровано:Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
Gryu

0

зупинити всі служби вамп, вийти з вампа.

відкрийте блокнот, потім введіть> ВСТАНОВИТИ ПАРОЛЬ ДЛЯ 'root' @ 'localhost' = ПАРОЛЬ ('');

потім збережіть його на c: диск з будь-яким іменем .. наприклад "c: /example.txt"

тепер перейдіть до вашого "wamp" falder wamp> bin> mysql> mysql (ваша версія)> bin у моєму випадку - "C: \ wamp \ bin \ mysql \ mysql5.6.17 \ bin"

тепер скопіюйте свій шлях, потім запустіть cmd за допомогою (ctrl + r), потім введіть "cmd" (введіть)

введіть cd, клацніть правою кнопкою миші на cmd та вставте шлях (введіть), тепер введіть (mysqld --init-file = C: \ example.txt) без фігурних дужок, потім (введіть)

потім перезавантажте ПК або відкрийте taskmgr і вбийте mysqld.exe

запустіть вамп і ваш пароль буде видалено ...


0

Для користувачів MacOS, якщо ви забудете свій пароль користувача, відповідь @ sohahaK ( https://stackoverflow.com/a/28601069/5628856 ) хороша, але є ще кілька хитрощів:

Якщо ви використовуєте системні налаштування для запуску mysql на стороні сервера, просто

sudo mysqld_safe --skip-grant-tables

може не працювати для вас.

Ви повинні переконатися, що аргументи командного рядка однакові з конфігурацією запуску системи.

Для мене працює наступна команда:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

Можна використовувати

ps aux | grep mysql

щоб перевірити своє.


-1

На Ubuntu,

sudo dpkg-reconfigure mysql-server-5.5 

Замініть 5.5поточну версію, і вам буде запропоновано ввести новий пароль користувача.


В якій ОС? Це не має сенсу.
Хом Назид

-1
  1. На Mac відкриті системні налаштування> MySQL.
  2. У розділі конфігурації MySQL перевірте ініціалізацію бази даних.
  3. змінити пароль у підказці. ініціалізувати базу даних
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.