在全新的 mysql 5.7 安装中设置 root 密码

man*_*nix 12 mysql linux centos

我正在尝试在具有CentOS Linux release 7.2.1511. 看一下安装过程:

# sudo yum install mysql-server
Run Code Online (Sandbox Code Playgroud)

输出:

Dependencies Resolved

===========================================================================================================================================================================================================
 Package                                                 Arch                                    Version                                         Repository                                           Size
===========================================================================================================================================================================================================
Removing:
 mysql-community-client                                  x86_64                                  5.7.10-1.el7                                    @mysql57-community                                  109 M
 mysql-community-server                                  x86_64                                  5.7.10-1.el7                                    @mysql57-community                                  652 M

Transaction Summary
===========================================================================================================================================================================================================
Run Code Online (Sandbox Code Playgroud)

我运行了 mysql damon:

# sudo service mysqld start
Run Code Online (Sandbox Code Playgroud)

检查服务:

# ps -ef|grep mysql
mysql     1371     1  0 22:17 ?        00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Run Code Online (Sandbox Code Playgroud)

这就是让我发疯的问题。我想第一次设置root密码,所以我做了:

# sudo mysql_secure_installation
// when password is required, I just type "enter key"
Run Code Online (Sandbox Code Playgroud)

但是输出:保护 MySQL 服务器部署。

输入用户 root 的密码:错误:用户“root”@“localhost”的访问被拒绝(使用密码:否)

谷歌搜索错误,在90%的情况下,解决方法是调用mysqld_safe --skip-grant-tables &命令:

service mysqld stop
mysqld_safe --skip-grant-tables &
mysql --user=root mysql
update user set Password=PASSWORD('new-password') where user='root';
flush privileges;
exit;
Run Code Online (Sandbox Code Playgroud)

但是mysqld_safe提示“找不到命令”错误。我也用 进行了测试sudo mysqld --skip-grant-tables &,但它没有做任何事情。如果您能引导我走向正确的方向以设置 root 密码,我将不胜感激。先感谢您。

小智 23

如果您只是在 root 用户下运行 mysql 命令,您将被授予访问权限而无需输入密码,因为为 root@localhost 启用了套接字身份验证。

本指南具有误导性。

设置密码的唯一方法是切换到本机身份验证,例如:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
Run Code Online (Sandbox Code Playgroud)


man*_*nix 10

在我对解决方案的疯狂研究中,我查看/var/log/mysqld.log并发现了这一行:

【注意】为root@localhost生成临时密码:abc123

看起来 mysql 5.7+ 在安装中生成一个随机密码并在该文件中提示。


小智 7

使用以下步骤重置密码:

$ sudo systemctl start mysqld
Run Code Online (Sandbox Code Playgroud)

重置 MySQL 服务器 root 密码。

$sudo grep 'temporary password' /var/log/mysqld.log
Run Code Online (Sandbox Code Playgroud)

输出类似:

10.744785Z 1 [Note] A temporary password is generated for root@localhost: o!5y,oJGALQa
Run Code Online (Sandbox Code Playgroud)

在重置mysql_secure_installation过程中使用上述密码。

$ sudo mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root: 
Run Code Online (Sandbox Code Playgroud)

您已成功重置 MySQL 服务器的 root 密码。使用以下命令检查 MySQL 服务器是否连接。

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

请参阅我的文章:在 RHEL/Centos 7 上安装最新的 MySQL 5.7