MySQL 5.7的默认根密码是什么


77

像其他旧版MySQL一样,使用根ID和空/无密码全新安装后无法登录MySQL数据库


6
根不再拥有一个,因为它不使用一个。默认情况下,auth方法为auth socket。使用sudo以root用户访问权限进行访问,如果需要没有root用户系统访问权限的root lmysql oogin,则将auth方法更改为password并设置一个密码。
G.Martin '16

3
@ G.Martin您介意将此评论扩展为包含更详细步骤的答案吗?我认为这是我要使用的解决方案,但不知道如何更改auth方法。(sudo mysql -u root确实对我有用-我想更改它,所以我可以mysql -u root不用密码就可以做)
Max Williams

抱歉,您可能已经知道了,但是我发现我的帖子仅适用于debian发行版。如果仍然有问题(怀疑),我可以提供更多详细信息。
G.Martin '17

Answers:


149

有很多答案说要重新安装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';

要么:

// 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!

3
我已按照这些步骤操作,但对我不起作用。一切看起来都不错,但是一旦我重新启动MySQL,插件值就会重置为auth_socket。知道缺少什么吗?
马特·莱布

4
最初不是为我工作。然后我尝试在EXIT之前发出COMMIT,它起作用了!
LeandroG '18年

2
为我工作,但没有使用:mysql -u debian-sys-maint -p,我不得不使用:sudo mysql -u root。当我用的第一个变化并没有被甚至保存COMMIT
彼得·

2
需要做一个commit;之前FLUSH PRIVILEGES;
Eric Wang

3
测试了这个。默认安装了18.04 LTS的Mysql 5.7+会更改密码,因此,您需要运行它而不是UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
消息

109

在Linux上全新安装MySQL-community-server 5.7之后,您需要从/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


7
谢谢!有点疯狂地在这里找到此信息,而不是Oracle的MySQL 5.7文档。
maddin2code

7
这可以挽救我的生命……一直在寻找解决方案,这解决了我所有的问题。甚至mysql网站上的文档也没有提到这一点。这是疯子。谢谢!
nodeffect

1
您将在Windows机器上看什么?
rotaercz

21
/var/log/mysqld.log对我而言不存在(薄荷糖上的
mariadb

9
对于那些找不到的人/var/log/mysqld.log,那就跑步sudo mysql_secure_installation。请记住使用该命令运行,sudo否则您将收到“拒绝访问”错误。
SarahCoding '18年

30

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


4
坦白说,我一开始就把这个答案当作愚蠢的,然后尝试了很多其他方法,包括在本地Ubuntu计算机上不存在的文件中搜索随机生成的密码。但是,只需一个简单的SUDO和一个空白密码即可。有一个赞!
MrTony

13

我的新Linux Mint 19默认已安装MySQL服务器5.7。

但是,什么是MySQLroot密码?事实证明:

默认安装使用auth_socket身份验证代替密码!

如果使用相同的用户名登录Linux系统,则它允许无密码登录。要以MySQL root身份登录user,可以使用sudo:

sudo mysql --user=root

但是如何更改root密码?为了说明正在发生的情况,我创建了一个具有完全特权的新用户“ me”,该用户具有:

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无法获得任何信息...

==>要改变这种替代身份验证模式并使MySQLroot用户返回使用密码:

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

一个很好的解释。

有关更多详细信息,请参见MySQL手册


7

如果您想无人值守安装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,并通过taskel安装了它。你有什么建议吗?
AboElnouR

我会搜索:find / -name mysqld 2>/dev/null
hpaknia

5

全新安装后,MySQL 5.7或更高版本会生成默认的临时密码。

要首先使用MySQL,则需要从日志文件中获取该密码/var/log/mysqld.log。因此,请遵循以下过程:

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

  2. mysql_secure_installation

需要第二个命令来更改MySQL的密码,并进行某些其他更改,例如删除临时数据库,允许或禁止对root用户的远程访问,删除匿名用户等。


4

经过大量尝试后,我可以使用以下命令(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

有时不起作用。仅在重新启动计算机之后。


1
在Ubuntu Bionic 18.04 Mysql 5.7.29上工作。只是以为我会添加版本。谢谢。
加文·辛普森

3

这些答案都不适用于Ubuntu Server 18.04.1和MySQL 5.7.23。我花了很多时间尝试手动设置密码和auth插件失败,在日志中找到密码(密码不存在),等等。

该解决方案实际上非常简单:

sudo mysql_secure_installation

做到这一点非常重要sudo。如果尝试不进行提升操作,系统将要求您输入根密码,而您显然没有该密码。


谢谢你,你救了我的一天!
avtomaton

3

似乎是为了避免开发人员抓住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

繁荣!


不。它旨在为root设置密码,而不是空密码。
瑞安

1
默认情况下,它被设计为仅通过本地套接字与root连接。无论哪种方式,即使对于开发人员,也要使用root来连接MySQL,这是一种不好的做法。我的答案描述了如何使用创建实际可行的非root用户的良好做法。
Pablo Pazos

1

我刚刚在机器上安装了Linux Mint 19(基于Ubuntu 18.04)。我从存储库(sudo apt install mysql-server)安装了MySQL 5.7 ,令人惊讶的是在安装过程中,安装程序没有提示输入root密码。结果,我无法登录MySQL。我在这里和那里搜索了谷歌,并尝试了在网上找到的各种答案,包括上面接受的答案。我已卸载(使用mysql清除所有dpkgs的名字),然后从默认的Linux Mint存储库中重新安装了它。没有效果。

经过数小时的无效工作之后,我决定从官方页面重新安装MySQL。我打开了apt repo的MySQL下载页面(https://dev.mysql.com/downloads/repo/apt),然后单击右下角的Download按钮。

接下来,使用dpkg运行它:

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

在安装设置中,选择您要安装的MySQL版本。默认选项是8.0,但我将其更改为5.7。单击确定退出。之后,您的软件源中将有一个新的MySQL存储库。

更新您的仓库:

sudo apt update

最后,安装MySQL:

sudo apt install mysql-server

现在,系统提示我提供root密码!希望它对具有相同经验的其他人有所帮助。


mysql-server从ubuntu repo进行安装时,我花了好几天解决它,但是最终,MySQL提供的一个正式版本开始工作了。
Inam Ul Huq,

0

在我的情况下,数据目录是使用--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帐户


0

我遇到了同样的问题,而我唯一能做到的就是走这条路:

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

这使我可以重新创建我的 用户名,并输入用户名的密码


0

带有MySql 8.0Ubuntu 20.04开始:您可以通过以下方式设置密码:

  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(或使用用户名root的phpMyAdmin)并选择密码。

P,S:

您也可以用user登录debian-sys-maint,密码写在文件中/etc/mysql/debian.cnf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.