Изменение пароля root MySQL

101

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

заранее спасибо

Ник
источник
2
пожалуйста, опубликуйте вашу фактическую ошибку
Вишванат Далви
17
Если вы не заблокированы, SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); это безопаснее всего.
Sabgenton
Я выполнил шаги, описанные
Прем
1
Версия сервера: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'ПАРОЛЬ ("1")' в строке 1 УСТАНОВИТЬ ПАРОЛЬ ДЛЯ 'root' @ 'localhost' = PASSWORD ("somepassword");
ученик

Ответы:

133
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;
kta
источник
7
Это работает для меня в 5.7, а принятый ответ - нет.
Stoopkid
3
Это правильное решение, если ваш пароль root MySQL пуст.
fschuindt 06
4
> ОБНОВИТЬ mysql.user SET authentication_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > ПРИВИЛЕГИИ ПРОМЫВКИ; В MySQL версии 5.7.x больше нет поля пароля в таблице mysql. Он был заменен на authentication_string.
Роберт Энтони С. Трибиана
2
Это дает мне
добро
1
Требуется дополнительная команда, FLUSH PRIVILEGESчтобы изменения вступили в силу без перезапуска сервера базы данных.
NetVicious
64

взгляните на это из Справочного руководства MySQL:

Первый вход в mysql:

# mysql -u root -p

Затем в командной строке mysql запустите:

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

затем

FLUSH PRIVILEGES;

Дополнительную информацию см. На этой странице: Сброс корневого пароля: системы Unix

VSB
источник
При обновлении пароля пользователя возникла ошибка «Вы используете режим безопасного обновления и пытались обновить таблицу без WHERE, в которой используется столбец KEY ...». См. Stackoverflow.com/questions/11448068/…, чтобы узнать, как обойти эту ошибку.
Джо Бориско 01
ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство , которое соответствует версии сервера MySQL для правого синтаксиса использовать вблизи «(» MyNewPass «) WHERE User =» корень «» в строке 1
discipleartem
31
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Вы можете найти Сброс пароля root в документации MySQL.

iamfaith
источник
Этот запрос у меня сработал, но новый пароль не работает (доступ запрещен). Он начал работать только после того, как я воссоздал пользователя root 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не существует. Спасибо, сэр!
Aleksandar
1
работает для меня . Я использую 5.7.x, mysql.userтаблицы нет . другие ответы устарели
Siwei Shen 申思维
Рад был помочь!!
Роберт Энтони С. Трибиана
Я откатываю его, потому что я намерен использовать> из-за точки с запятой в строке, которая предназначена для терминала
Роберт Энтони С. Трибиана
Затронуто 0 строк, сопоставлено строк: 3 изменено: 0 ...?
траиноз
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 для правого синтаксиса использовать вблизи «(» НОВОГО ПАРОЛЯ «) , где пользователь =» корень «» в строке 1
discipleartem
21

Пожалуйста, выполните следующие шаги.

шаг 1. остановить mysql

шаг 2. sudo mysqld_safe --skip-grant-tables

шаг 3.mysql -u root

шаг4.use mysql;

шаг5.show tables;

шаг6.describe user;

step7.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 в системе Ubuntu 18.04.2 LTS:

(получить права root)

$ sudo bash

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

# mysql_secure_installation

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

(+ edit: видимо нужно снова установить пароль?)

(не устанавливайте "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

Большое спасибо zetacuerich ) за этот отличный ответ (после нескольких часов поиска ...)

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

С.

Изменить (2020):

Этот метод больше не работает, см. Этот вопрос для справок в будущем ...

Bamboomy
источник
На данный момент это лучший ответ, по крайней мере, для сервера mysql 5.7.
Золтан Хайду,
ЛУЧШИЙ ответ. Спасибо.
Лучано Фантуцци
11

В MySQL 8.0.4+

Чтобы обновить текущего пользователя root:

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

LV98
источник
ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии вашего сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'IDENTIFIED BY' MyNewPass 'в строке 1
trainoasis
Просто скопировал точную
копию
Конечно, sshed на мой сервер + mysql -u root -p, чтобы получить
доступ
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

ваш новый пароль - «пароль».

tk_
источник
У меня сообщение: база данных не выбрана
Mimouni
@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
Пожалуйста, добавьте пояснение к своему коду - как именно это решает вопрос семилетней давности?
Нико Хаасе
Похоже, что за семь лет синтаксис изменился. Это не упаковка пароля с PASSWORD () dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu
Хэш пароля должен быть 41-значным шестнадцатеричным числом
Мимуни
1

Так много комментариев, но мне помог этот метод:

sudo mysqladmin -u root password 'my password'

В моем случае после установки я получил службу mysql без пароля для пользователя root, и мне нужно было установить пароль для моей безопасности.

Константин Романовский
источник
Его можно использовать для сброса пароля пользователя 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

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

MohitGhodasara
источник
0

Для пользователей MacOS, если вы забыли свой пароль root, ответ @soharaK ( 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

проверить свои собственные.

Шаофэй Чэн
источник
0

Или просто используйте интерактивную настройку:

sudo mysql_secure_installation
шиловка
источник
-1

В Ubuntu

sudo dpkg-reconfigure mysql-server-5.5 

Замените 5.5на вашу текущую версию, и вам будет предложено ввести новый пароль root.

Mouneer
источник
В какой ОС? Это не имеет никакого смысла.
Хом Назид
-1
  1. На Mac откройте системные настройки> MySQL.
  2. В разделе конфигурации MySQL проверьте наличие инициализации базы данных.
  3. измените пароль в подсказке. инициализировать базу данных
NNK Teja
источник