Какой пароль root по умолчанию для MySQL 5.7

Не удается войти в базу данных MySQL после новой установки с корневым идентификатором и пустым/без пароля, как это делают другие старые версии MySQL.


person Ryan    schedule 30.11.2015    source источник
comment
root больше не имеет его, потому что он его не использует. По умолчанию метод аутентификации — это сокет аутентификации. используйте sudo для доступа с корневым доступом, измените метод аутентификации на пароль и установите пароль, если вам нужен корневой lmysql oogin без доступа к корневой системе.   -  person G.Martin    schedule 13.11.2016
comment
@ G.Martin, не могли бы вы расширить этот комментарий до ответа с более подробными инструкциями? Я думаю, что это решение, которое я хочу использовать, но не знаю, как изменить метод аутентификации. (sudo mysql -u root у меня работает - я хочу изменить его, чтобы я мог просто выполнить mysql -u root без пароля)   -  person Max Williams    schedule 07.12.2016
comment
Извините, вы, наверное, уже поняли это, но я узнал, что мой пост относится только к дистрибутивам Debian. Если это все еще проблема (сомневаюсь), я могу предоставить более подробную информацию.   -  person G.Martin    schedule 10.07.2017


Ответы (14)


Там так много ответов, говорящих о переустановке mysql или использовании какой-либо комбинации

mysqld_safe --skip-grant-tables

и/или

UPDATE mysql.user SET Password=PASSWORD('password')

и/или что-то еще...

... Ничего из этого мне не помогло


Вот что у меня сработало в Ubuntu 18.04, сверху

С особым уважением к этот ответ для копания меня от разочарования по этому поводу...

$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf

Обратите внимание на строки, которые гласили:

user     = debian-sys-maint
password = blahblahblah

Потом:

$ mysql -u debian-sys-maint -p
Enter password: // type 'blahblahblah', ie. password from debian.cnf

mysql> USE mysql
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> COMMIT;  // When you don't have auto-commit switched on

Либо:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Or:

// For MySQL 5.7+
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';

Потом:

mysql> FLUSH PRIVILEGES;
mysql> COMMIT;  // When you don't have auto-commit switched on
mysql> EXIT

$ sudo service mysql restart
$ mysql -u root -p
Enter password: // Yay! 'new_password' now works!
person Stewart    schedule 12.05.2018
comment
Я выполнил эти шаги, и это не работает для меня. Все выглядит хорошо, но как только я перезапускаю MySQL, значение плагина сбрасывается на auth_socket. Есть идеи, чего не хватает? - person Matt Raible; 30.05.2018
comment
@MattRaible Честно говоря, я не знаю. Возможно, проверьте ответ, который я указал / связал выше? - person Stewart; 01.06.2018
comment
У меня изначально не работал. Затем я попытался выполнить COMMIT перед EXIT, и это сработало! - person LeandroG; 10.07.2018
comment
@LeandroG Приятно знать. Вышеупомянутый метод основан на настройке автоматической фиксации по умолчанию. - person Stewart; 10.07.2018
comment
У меня сработало, но вместо использования: mysql -u debian-sys-maint -p мне пришлось использовать: sudo mysql -u root . Когда я использовал первый, изменения не сохранялись даже с помощью COMMIT. - person Peter; 27.07.2018
comment
Нужно сделать commit; перед FLUSH PRIVILEGES;. - person user218867; 17.08.2018
comment
После добавления COMMIT; после FLUSH PRIVILEGES; это помогло. Спасибо! - person Jeff Moorhead; 13.09.2018
comment
Некоторые предлагают добавить COMMIT перед FLUSH PRIVILEGES; некоторые предлагали добавить его после. У меня было auto-commit для моего CLI, поэтому я не уверен, куда он должен идти и имеет ли это значение. Я добавил его после при редактировании. - person Stewart; 13.09.2018
comment
Протестировал это. Mysql 5.7+, установленный по умолчанию с 18.04 LTS, меняет пароль на UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';, поэтому вам нужно запустить его вместо ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; - person message; 02.10.2018
comment
@message Опубликованный код (за исключением комментариев) точно используется в реальной жизни. Пожалуйста, оставьте это в покое! - person Stewart; 02.10.2018
comment
@Stewart, вы можете просто отклонить мои изменения без этого комментария. Ваше решение не сработало для меня полностью. - person message; 03.10.2018
comment
@message, твой обходной путь сработал для меня как шарм! Спасибо - person Raghu; 11.10.2018
comment
Большое спасибо, примерно через час попыток это сработало для меня! - person handkock; 02.11.2018
comment
У меня не работает, волшебство происходит, когда я пытаюсь ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your new password'; из percona.com/blog/2016/03/16/ - person Bing Zhao; 28.01.2019
comment
Я могу подтвердить, что на 5.7 эта команда ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; не работает. Из вывода видно, что затронуто 0 строк. Упомянутый для 5.7+ работает, если вы не забываете Commit; и FLUSH PRIVILEGES - person Rui Taborda; 22.10.2019
comment
МУЖЧИНА СПАСИБО. Я ломал голову, чтобы понять, что не так, следуя многим другим шагам, но этот идеален. - person Hassan Jalil; 18.03.2020

После того, как вы установили MySQL-community-server 5.7 из свежей версии на Linux, вам нужно будет найти временный пароль из /var/log/mysqld.log, чтобы войти в систему как root.

  1. grep 'temporary password' /var/log/mysqld.log
  2. Запустите mysql_secure_installation, чтобы изменить новый пароль

ссылка: http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

person Ryan    schedule 30.11.2015
comment
Спасибо! Немного сумасшествие найти эту информацию здесь вместо документа MySQL 5.7 от Oracle. - person maddin2code; 09.02.2016
comment
Это спасает мне жизнь ... везде искал решение, и это решает все мои проблемы. Даже документ с сайта mysql не упоминал об этом. Это сумасшедший человек. Спасибо! - person nodeffect; 11.03.2016
comment
Где бы вы смотрели на машине с Windows? - person rotaercz; 11.12.2016
comment
@rotaercz попробовать следовать этому руководству? dev.mysql.com/doc/refman/5.7/en/ сброс разрешений.html - person Ryan; 17.12.2016
comment
/var/log/mysqld.log для меня не существует (mariadb на монетном дворе) - person donquixote; 16.03.2017
comment
Спасибо ! решил мою проблему здесь!! никогда не знал об этом временном пароле!! - person costamatrix; 05.07.2017
comment
Невероятно, я знаю, что не должен добавлять и такого себя! комментарии, но черт возьми, официальная документация даже не появится первой для этой информации - person Sebas; 27.08.2017
comment
Это не там. - person Panu Haaramo; 05.10.2017
comment
В MySQL 5.6 вы можете найти пароль в скрытом файле в домашнем каталоге пользователя root. - person Wildcard; 08.11.2017
comment
Для тех, кто не может найти /var/log/mysqld.log, просто запустите sudo mysql_secure_installation. Не забудьте запустить эту команду с sudo, иначе вы получите ошибку «Отказано в доступе». - person sarahcoding; 02.05.2018
comment
sudo mysql_secure_installation не сделает АБСОЛЮТНО НИЧЕГО, если корневая учетная запись MySQL использует плагин auth_socket. Я уточняю в мой ответ ниже - person Julian - BrainAnnex.org; 15.09.2019

MySQL 5.7 изменил модель безопасности: теперь для входа в MySQL root требуется sudo

Самым простым (и самым безопасным) решением будет создание нового пользователя и предоставление необходимых привилегий.

<сильный>1. Подключиться к mysql

sudo mysql --user=root mysql

<сильный>2. Создайте пользователя для phpMyAdmin

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ссылка — https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7

person Sachin Vairagi    schedule 10.10.2018
comment
Честно говоря, я сначала отбросил этот ответ как довольно глупый и попробовал множество других вещей, включая поиск случайно сгенерированных паролей в файлах, которых не было на моей локальной машине Ubuntu. Однако простой SUDO и пустой пароль сделали это. Проголосуйте! - person MrTony; 04.04.2019

Сервер MySQL 5.7 уже был установлен по умолчанию на моем новом Linux Mint 19.

Но какой у MySQL пароль root? Оказывается, что:

При установке по умолчанию для аутентификации используется auth_socket вместо паролей!

Это позволяет войти в систему без пароля, при условии, что вы вошли в систему Linux с тем же именем пользователя. Чтобы войти в систему как root user MySQL, можно использовать sudo:

sudo mysql --user=root

Но как тогда изменить пароль root? Чтобы проиллюстрировать, что происходит, я создал нового пользователя «я» с полными привилегиями:

mysql> CREATE USER 'me'@'localhost' IDENTIFIED BY 'my_new_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'me'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Сравнение «я» с «корень»:

mysql> SELECT user, plugin, HEX(authentication_string)  FROM mysql.user WHERE user = 'me' or user = 'root';
+------+-----------------------+----------------------------------------------------------------------------+
| user | plugin                | HEX(authentication_string)                                                 |
+------+-----------------------+----------------------------------------------------------------------------+
| root | auth_socket           |                                                                            |
| me   | mysql_native_password | 2A393846353030304545453239394634323734333139354241344642413245373537313... |
+------+-----------------------+----------------------------------------------------------------------------+

Поскольку он использует auth_socket, пароль root изменить нельзя: команда SET PASSWORD завершается ошибкой, а mysql_secure_installation ничего не достигает...

==> Чтобы отключить этот альтернативный режим аутентификации и вернуть пользователю MySQL root использование паролей:

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

A хорошее объяснение.

Дополнительные детали из руководства по MySQL.

person Julian - BrainAnnex.org    schedule 15.09.2019

Если вы хотите установить mysql или percona без присмотра (как в моем случае с ansible), вы можете использовать следующий скрипт:

# first part opens mysql log
# second part greps lines with temporary password
# third part picks last line (most recent one)
# last part removes all the line except the password
# the result goes into password variable

password=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n 's/.*root@localhost: //p')

# setting new password, you can use $1 and run this script as a file and pass the argument through the script

newPassword="wh@teverYouLikE"

# resetting temporary password

mysql -uroot -p$password -Bse "ALTER USER 'root'@'localhost' IDENTIFIED BY '$newPassword';"
person hpaknia    schedule 16.06.2017
comment
cat: /var/log/mysqld.log: No such file or directory Я использую ubuntu 18.04 и устанавливал через tasksel. У вас есть предложение? - person AboElnouR; 20.05.2018
comment
Я бы поискал: find / -name mysqld 2>/dev/null - person hpaknia; 09.10.2019

MySQL 5.7 или новее генерирует временный пароль по умолчанию после новой установки.

Чтобы сначала использовать MySQL, вам потребуется получить этот пароль из файла журнала, который присутствует в папке /var/log/mysqld.log. Итак, следуйте следующему процессу:

  1. grep 'temporary password' /var/log/mysqld.log

  2. mysql_secure_installation

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

person Vipul Sharma    schedule 31.10.2018

Кажется, что вещи были разработаны, чтобы разработчики не устанавливали пользователя root, лучшим решением было бы:

sudo mysql -u root

Затем создайте обычного пользователя, установите пароль и используйте этого пользователя для работы.

create user 'user'@'localhost' identified by 'user1234';
grant all on your_database.* to 'user'@'localhost';
select host, user from mysql.user;

Затем попробуйте получить доступ:

mysql -u user -p

Бум!

person Pablo Pazos    schedule 06.10.2018
comment
Неа. Он был разработан, чтобы установить пароль для root вместо пустого пароля. - person Ryan; 07.10.2018
comment
По умолчанию он предназначен для подключения только через локальный сокет с рутом. В любом случае использование root для подключения к MySQL является плохой практикой даже для разработчиков, и мой ответ описывает, как использовать хорошую практику создания пользователя без полномочий root, который действительно работает. - person Pablo Pazos; 08.10.2018
comment
Молодец! это ответ для меня! - person Siwei; 03.03.2021

После долгих попыток я смог сбросить пароль по умолчанию с помощью следующих команд (Ubuntu и производные):

sudo -i
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot
use mysql;
update user set authentication_string=password('YOURPASSWORD') where user='root';
update user set plugin="mysql_native_password" where User='root';  
flush privileges;
quit;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

Иногда, даже после ввода в терминале

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &

Я получил ошибку, что mysqld не существует. Итак, выйдите и снова введите те же команды.

И последняя команда

sudo /etc/init.d/mysql start

Иногда не работает. Только после перезагрузки компьютера.

person Leonardo    schedule 30.04.2019
comment
Работал на Ubuntu Bionic 18.04 Mysql 5.7.29. Просто решил добавить версии. Спасибо. - person Gavin Simpson; 05.02.2020

Ни один из этих ответов не работал у меня на Ubuntu Server 18.04.1 и MySQL 5.7.23. Я потратил кучу времени, пытаясь и безуспешно пытаясь установить пароль и плагин авторизации вручную, найти пароль в журналах (его там нет) и т. д.

Решение на самом деле очень простое:

sudo mysql_secure_installation

Очень важно сделать это с sudo. Если вы попробуете без повышения прав, вас попросят ввести пароль root, которого у вас, очевидно, нет.

person bendodge    schedule 28.09.2018

Я только что установил Linux Mint 19 (на основе Ubuntu 18.04) на свою машину. Я установил MySQL 5.7 из репозитория (sudo apt install mysql-server), и, что удивительно, во время установки программа установки не предлагала ввести пароль root. В результате я не смог войти в MySQL. Я гуглил здесь и там и пробовал различные ответы, которые я нашел в сети, включая принятый ответ выше. Я удалил (удалив все dpkgs с mysql в имени) и снова переустановил из репозиториев Linux Mint по умолчанию. НИ ОДИН не работает.

После нескольких часов бесплодной работы я решил переустановить MySQL с официальной страницы. Я открыл страницу загрузки MySQL (https://dev.mysql.com/downloads/repo/apt) для подходящего репозитория и нажмите кнопку Загрузить в правом нижнем углу.

Затем запустите его с помощью dpkg:

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

При настройке установки выберите версию MySQL, которую вы хотите установить. Вариант по умолчанию — 8.0, но я изменил его на 5.7. Нажмите OK, чтобы выйти. После этого у вас есть новый репозиторий MySQL в ваших источниках программного обеспечения.

Обновите репозиторий:

sudo apt update

Наконец, установите MySQL:

sudo apt install mysql-server

И теперь мне было предложено ввести пароль root! Надеюсь, это поможет другим с таким же опытом.

person Firdaus Adiputra    schedule 01.07.2018
comment
Я потратил несколько дней, решая эту проблему, устанавливая mysql-server из репозитория Ubuntu, но в конце официальный, который предоставляет MySQL, работает. - person Inam Ul Huq; 29.07.2019

Начиная с Ubuntu 20.04 с MySql 8.0: вы можете установить пароль следующим образом:

  1. войти в mysql с помощью sudo mysql -u root

  2. изменить пароль:

USE mysql;
UPDATE user set authentication_string=NULL where User='root';
FLUSH privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'My-N7w_And.5ecure-P@s5w0rd';
FLUSH privileges;
QUIT

теперь вы сможете войти в систему с помощью mysql -u root -p (или в phpMyAdmin с именем пользователя root) и выбранным вами паролем.

P,S:

Вы также можете войти под пользователем debian-sys-maint, пароль прописан в файле /etc/mysql/debian.cnf

person Ohad Cohen    schedule 28.07.2020
comment
Спасибо, что поделились - person huyhoang-vn; 20.01.2021

В моем случае каталог данных был автоматически инициализирован опцией --initialize-insecure. Таким образом, /var/log/mysql/error.log не содержит временного пароля, но:

[Внимание] root@localhost создан с пустым паролем! Пожалуйста, рассмотрите возможность отключения опции --initialize-insecure.

Что сработало:

shell> mysql -u root --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Подробности: Справочное руководство по MySQL 5.7 > 2.10.4 Защита исходного MySQL Аккаунт

person Ra.    schedule 26.09.2018

Я столкнулся с той же проблемой, и единственное, что я смог сделать, это пойти по этому пути:

drop user admin@localhost;
flush privileges;
create user admin@localhost identified by 'admins_password'

Это позволило мне воссоздать мое имя пользователя и ввести пароль в качестве имени пользователя.

person Donald L Wilson    schedule 06.09.2018

Чтобы сделать это в неинтерактивном режиме (из скрипта):

systemctl start mysqld
MYSQL_ROOT_TMP_PSW=$(grep 'temporary password' $logpath/mysqld.log |sed "s|.*: ||")

## POPULATE SCHEMAS WITH ROOT USER
/usr/bin/mysql --connect-expired-password -u root -p${MYSQL_ROOT_TMP_PSW} < "$mysql_init_script"

Вот глава скрипта инициализации

SET GLOBAL validate_password_policy=LOW;
FLUSH privileges;

SET PASSWORD = PASSWORD('MYSQL_ROOT_PSW');
FLUSH privileges;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH privileges;

...

Затем перезапустите службу systemctl restart mysqld

person tuxErrante    schedule 28.12.2020