MySQL 5.7 的默认 root 密码是啥
Posted
技术标签:
【中文标题】MySQL 5.7 的默认 root 密码是啥【英文标题】:What is the default root pasword for MySQL 5.7MySQL 5.7 的默认 root 密码是什么 【发布时间】:2016-03-03 15:41:11 【问题描述】:全新安装后无法像其他旧 mysql 版本那样使用 root ID 和空/无密码登录到 MySQL 数据库
【问题讨论】:
root 不再有一个,因为它不使用一个。默认情况下,auth 方法是 auth socket。使用 sudo 访问 root 权限,如果需要没有 root 系统访问权限的 root lmysql oogin,请将 auth 方法更改为密码并设置密码。 @G.Martin 您介意将此评论扩展为包含更详细步骤的答案吗?我认为这是我想使用但不知道如何更改身份验证方法的解决方案。 (sudo mysql -u root
对我有用 - 我想更改它,这样我就可以在没有密码的情况下使用 mysql -u root
)
对不起,你可能已经知道了,但我发现我的帖子只适用于 debian 发行版。如果它仍然是一个问题(怀疑),我可以提供更多细节。
【参考方案1】:
那里有很多答案说要重新安装mysql或使用一些组合
mysqld_safe --skip-grant-tables
和/或
UPDATE mysql.user SET Password=PASSWORD('password')
和/或别的什么...
...这些都不适合我
这是对我有用的,在 Ubuntu 18.04 上,从顶部开始
特别感谢this answer 让我摆脱了对此的挫败感......
$ 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!
【讨论】:
我已按照这些步骤操作,但它对我不起作用。一切看起来都不错,但是一旦我重新启动 MySQL,插件值就会重置为auth_socket
。知道缺少什么吗?
最初对我不起作用。然后我尝试在 EXIT 之前发出 COMMIT 并且它起作用了!
为我工作,但不是使用:mysql -u debian-sys-maint -p,我不得不使用:sudo mysql -u root。当我使用第一个时,即使使用 COMMIT 也没有保存更改
需要在FLUSH PRIVILEGES;
之前做一个commit;
。
对此进行了测试。 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';
【参考方案2】:
在 Linux 上从新安装 MySQL-community-server 5.7 后,您需要从 /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
【讨论】:
谢谢!在这里找到这些信息而不是 Oracle 的 MySQL 5.7 文档有点疯狂。 这救了我的命...一直在到处寻找解决方案,这解决了我所有的问题。甚至 mysql 网站上的文档也没有提到这一点。这是个疯子。谢谢! /var/log/mysqld.log 对我来说不存在(mariadb on mint) 对于那些找不到/var/log/mysqld.log
的人,只需运行sudo mysql_secure_installation
。请记住使用sudo
运行该命令,否则您将收到“拒绝访问”错误。
如果 MySQL root 帐户使用“auth_socket”插件,sudo mysql_secure_installation
绝对不会做任何事情。我详细在my answer below【参考方案3】:
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
【讨论】:
老实说,我起初认为这个答案很愚蠢而放弃了这个答案,并尝试了很多其他的东西,包括在我的本地 Ubuntu 机器上不存在的文件中搜索随机生成的密码。然而,一个简单的 SUDO 和一个空白密码就可以了。投赞成票!【参考方案4】:我的新 Linux Mint 19 上已经默认安装了 MySQL 服务器 5.7。
但是,MySQL root
密码是什么?事实证明:
默认安装使用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
什么也得不到……
==> 要取消此备用身份验证模式并将 MySQL root
用户恢复为使用密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SOME_NEW_ROOT_PASSWORD';
一个good explanation.
更多details from the MySQL manual.
【讨论】:
【参考方案5】:如果你想在无人值守的情况下安装 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 安装的。你有什么建议吗?
我会搜索它:find / -name mysqld 2>/dev/null
【参考方案6】:
MySQL 5.7 或更新版本在全新安装后生成默认临时密码。
要首先使用 MySQL,您需要从位于 /var/log/mysqld.log
的日志文件中获取该密码。所以遵循以下流程:
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
第二个命令需要更改 MySQL 的密码,还需要进行某些其他更改,例如删除临时数据库、允许或禁止对 root 用户进行远程访问、删除匿名用户等……
【讨论】:
【参考方案7】:似乎是为了避免开发人员设置 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设置密码而不是空密码。 默认情况下,它被设计为仅通过本地套接字与 root 连接。无论哪种方式,即使对于开发人员,使用 root 连接到 MySQL 也是一种不好的做法,我的回答描述了如何使用创建实际工作的非 root 用户的良好做法。【参考方案8】:这些答案都不适用于 Ubuntu Server 18.04.1 和 MySQL 5.7.23。我花了很多时间尝试手动设置密码和身份验证插件,在日志中找到密码(它不存在)等等,但都失败了。
解决方案其实超级简单:
sudo mysql_secure_installation
使用sudo
执行此操作非常重要。如果您尝试不提升权限,系统会要求您输入 root 密码,而您显然没有。
【讨论】:
【参考方案9】:经过大量尝试,我可以使用以下命令(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 Bionic 18.04 Mysql 5.7.29 上工作。只是想我会添加版本。谢谢。【参考方案10】:我刚刚在我的机器上安装了 Linux Mint 19(基于 Ubuntu 18.04)。我从 repo (sudo apt install mysql-server) 安装了 MySQL 5.7,令人惊讶的是,安装过程中没有提示输入 root 密码。结果我无法登录 MySQL。我在这里和那里搜索并尝试了我在网上找到的各种答案,包括上面接受的答案。我卸载(清除所有名称中带有 mysql 的 dpkgs)并从默认的 Linux Mint 存储库重新安装。 NONE 有效。
经过几个小时的非生产性工作,我决定从官方页面重新安装 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 密码!希望对有同样经历的其他人有所帮助。
【讨论】:
我在从 ubuntu repo 安装mysql-server
时花了好几天的时间来解决它,但最终官方提供的 MySQL 可以正常工作。【参考方案11】:
从 Ubuntu 20.04 和 MySql 8.0 开始:您可以这样设置密码:
使用sudo mysql -u root
登录mysql
修改密码:
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:
您也可以使用用户debian-sys-maint
登录,密码写在文件/etc/mysql/debian.cnf
中
【讨论】:
感谢分享【参考方案12】:在非交互模式下(来自脚本):
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
【讨论】:
【参考方案13】:在我的例子中,数据目录是使用--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 Reference Manual > 2.10.4 Securing the Initial MySQL Account
【讨论】:
【参考方案14】:我遇到了同样的问题,我唯一能做的就是走这条路:
drop user admin@localhost;
flush privileges;
create user admin@localhost identified by 'admins_password'
这让我可以重新创建我的用户名并为用户名输入一个密码。
【讨论】:
以上是关于MySQL 5.7 的默认 root 密码是啥的主要内容,如果未能解决你的问题,请参考以下文章