我刚刚在Ubuntu上安装了MySQL,root用户无法登录:)
我该如何找回密码?使用空白输入密码不起作用。
Answers:
您可以--skip-grant-tables
通过使用以下命令以root用户身份(或使用sudo)运行以下服务器来重设root密码,并使用密码运行服务器,而无需密码登录:
# service mysql stop
# mysqld_safe --skip-grant-tables &
$ mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
# service mysql stop
# service mysql start
$ mysql -u root -p
现在,您应该可以使用新密码以root用户身份登录。
也可以在其中/home/$USER/.mysql_history
或重设密码/root/.mysql_history
的用户中找到重设密码的查询,但是以上操作始终有效。
注:之前的MySQL 5.7列被称为password
代替authentication_string
。将上面的行替换为
mysql> update user set password=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
dpkg
方法和下面的方法之后,并且让我非常沮丧,因为没有任何效果(顺便说一句,我正在使用16.04和mysql-sever-5.7
),我注意到如果我使用sudo进行连接,mysql将接受我的新凭据。即sudo mysql -u root -p
没有须藤我得到Access denied for user 'root'@'localhost'
。之前我从来没有使用过sudo,也没有在这里提到它,但是经过一个令人沮丧的小时之后,这似乎是解决方案。
sudo
在使用mysql之前,我从未使用过,现在必须使用吗?我不明白为什么我必须成为root Linux用户才能访问mysql中的root帐户。这种行为使我想起了postgresql。
我意识到这是一个旧线程,但是我想我将用我的结果对其进行更新。
Alex,听起来像您是通过元软件包“ mysql-server”安装了MySQL服务器。这将通过引用安装最新的软件包(在我的情况下为mysql-server-5.5)。我和您一样,没有像我期望的那样在安装时提示输入MySQL密码。我想有两个答案:
解决方案1:以全名安装MySQL:
$ sudo apt-get install mysql-server-5.5
要么
解决方案#2:重新配置软件包...
$ sudo dpkg-reconfigure mysql-server-5.5
您必须指定完整的软件包名称。使用元软件包“ mysql-server”对我来说没有理想的结果。我希望这可以帮助别人 :)
sudo dpkg-reconfigure mysql-server
,但这没有用。
sudo dpkg-reconfigure mysql-server-5.7
在Ubuntu 14.04上的MySQL 5.5需要稍微不同的命令,如这里推荐的。简而言之:
sudo /etc/init.d/mysql stop
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
mysql -u root
然后从MySQL提示符
FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('password');
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
FLUSH PRIVILEGES;
和所引用的源提供的另一种方法为好。
--skip-grant-tables --skip-networking &
对我来说,解决客户的需求真的很有帮助,但我想了解一下,这样我可以评估风险。谢谢!
skip-grant-tables
当然,需要谨慎,因为有权访问服务器的任何人都可以访问该实例的所有架构。 skip-networking
我认为问题不大,但您应该自己评估。如果我想在没有当前root密码的情况下重置root密码,我认为自己已经在安全管理器中了:)。不确定是否有更“安全”的方法。
对于RHEL-mysql 5.5:
/etc/init.d/mysql stop
/etc/init.d/mysql start --skip-grant-tables
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
mysql -uroot -pnewpwd
mysql>
这是设置root密码的最佳方法:Source Link步骤3对我来说非常有效。
给你的命令
- 须藤MySQL
- 选择用户,authentication_string,插件,主机from mysql.user;
- ALTER USER'root'@'localhost'由mysql_native_password标识为'password';
- 冲洗特权;
- 选择用户,authentication_string,插件,主机from mysql.user;
- 出口
现在您可以将root用户的密码设置为' password ':
- mysql -u root -p
- 创建用户'sammy'@'localhost'由'password'标识;
- 授予所有特权。使用格兰特选项将'sammy'@'localhost';
- 冲洗特权;
- 出口
测试您的MySQL服务和版本:
systemctl status mysql.service
sudo mysqladmin -p -u root version
有一个简单的解决方案。
MySql 5.7带有匿名用户,因此您需要重新配置MySQL服务器。
您可以使用此命令
尝试找到临时通行证:
grep 'temporary password' /var/log/mysqld.log
然后:
sudo mysql_secure_installation
在此链接上是有关mysql 5.7的更多信息
https://dev.mysql.com/doc/refman/5.7/zh-CN/linux-installation-yum-repo.html
实际上很简单。您不必经历很多事情。只需在终端中运行以下命令,然后按照屏幕上的说明进行操作即可。
sudo mysql_secure_installation
由于不确定,我将在这里做一个假设。我认为我的MySQL(在最新的20.04版本上运行)甚至没有根。我曾尝试设置一个,但记得有问题。我怀疑没有root用户,如果您以root用户身份登录,它将自动以MySQL root用户身份登录。
我为什么这么认为呢?因为当我执行MySQL -u root -p时,它将接受任何密码,并以root用户身份登录时以MySQL root用户身份登录。
我已经确认在非root用户上尝试不起作用。
我喜欢这个模特。
编辑2020.12.19:我不再是一个谜,为什么如果您以root用户身份登录,root用户身份登录MySQL。它与身份验证类型有关。更高版本的MySQL使用MySQL插件“ auth_socket”进行配置(也许您已经注意到系统上的/run/mysqld/mysqld.sock文件并对此有所疑惑)。该插件使用库auth_socket.so提供的SO_PEERCRED选项。
如果需要,您可以简单地通过创建/更新密码来恢复到密码验证。在下面显示两种方式和选项以使其清晰。
使用auth_socket创建用户'valerie'@'localhost';
创建用户'valerie'@'localhost'由'password'标识;