Не удается войти в базу данных MySQL после новой установки с корневым идентификатором и пустым/без пароля, как это делают другие старые версии MySQL.
Какой пароль root по умолчанию для MySQL 5.7
Ответы (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!
auth_socket
. Есть идеи, чего не хватает?
- person Matt Raible; 30.05.2018
commit;
перед FLUSH PRIVILEGES;
.
- person user218867; 17.08.2018
COMMIT;
после FLUSH PRIVILEGES;
это помогло. Спасибо!
- person Jeff Moorhead; 13.09.2018
COMMIT
перед FLUSH PRIVILEGES
; некоторые предлагали добавить его после. У меня было auto-commit
для моего CLI, поэтому я не уверен, куда он должен идти и имеет ли это значение. Я добавил его после при редактировании.
- person Stewart; 13.09.2018
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
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
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
не работает. Из вывода видно, что затронуто 0 строк. Упомянутый для 5.7+ работает, если вы не забываете Commit;
и FLUSH PRIVILEGES
- person Rui Taborda; 22.10.2019
После того, как вы установили MySQL-community-server 5.7 из свежей версии на Linux, вам нужно будет найти временный пароль из /var/log/mysqld.log, чтобы войти в систему как root.
grep 'temporary password' /var/log/mysqld.log
- Запустите
mysql_secure_installation
, чтобы изменить новый пароль
ссылка: http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
/var/log/mysqld.log
, просто запустите sudo mysql_secure_installation
. Не забудьте запустить эту команду с sudo
, иначе вы получите ошибку «Отказано в доступе».
- person sarahcoding; 02.05.2018
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
Сервер 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';
Дополнительные детали из руководства по MySQL.
Если вы хотите установить 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';"
cat: /var/log/mysqld.log: No such file or directory
Я использую ubuntu 18.04 и устанавливал через tasksel. У вас есть предложение?
- person AboElnouR; 20.05.2018
find / -name mysqld 2>/dev/null
- person hpaknia; 09.10.2019
MySQL 5.7 или новее генерирует временный пароль по умолчанию после новой установки.
Чтобы сначала использовать MySQL, вам потребуется получить этот пароль из файла журнала, который присутствует в папке /var/log/mysqld.log
. Итак, следуйте следующему процессу:
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
Вторая команда необходима для изменения пароля для MySQL, а также для внесения некоторых других изменений, таких как удаление временных баз данных, разрешение или запрет удаленного доступа для пользователя root, удаление анонимных пользователей и т. д.
Кажется, что вещи были разработаны, чтобы разработчики не устанавливали пользователя 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
Бум!
После долгих попыток я смог сбросить пароль по умолчанию с помощью следующих команд (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
Иногда не работает. Только после перезагрузки компьютера.
Ни один из этих ответов не работал у меня на Ubuntu Server 18.04.1 и MySQL 5.7.23. Я потратил кучу времени, пытаясь и безуспешно пытаясь установить пароль и плагин авторизации вручную, найти пароль в журналах (его там нет) и т. д.
Решение на самом деле очень простое:
sudo mysql_secure_installation
Очень важно сделать это с sudo
. Если вы попробуете без повышения прав, вас попросят ввести пароль root, которого у вас, очевидно, нет.
Я только что установил 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! Надеюсь, это поможет другим с таким же опытом.
mysql-server
из репозитория Ubuntu, но в конце официальный, который предоставляет MySQL, работает.
- person Inam Ul Huq; 29.07.2019
Начиная с Ubuntu 20.04 с MySql 8.0: вы можете установить пароль следующим образом:
войти в mysql с помощью
sudo mysql -u root
изменить пароль:
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
В моем случае каталог данных был автоматически инициализирован опцией --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 Аккаунт
Я столкнулся с той же проблемой, и единственное, что я смог сделать, это пойти по этому пути:
drop user admin@localhost;
flush privileges;
create user admin@localhost identified by 'admins_password'
Это позволило мне воссоздать мое имя пользователя и ввести пароль в качестве имени пользователя.
Чтобы сделать это в неинтерактивном режиме (из скрипта):
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
sudo mysql -u root
у меня работает - я хочу изменить его, чтобы я мог просто выполнитьmysql -u root
без пароля) - person Max Williams   schedule 07.12.2016