【发布时间】:2011-08-06 16:34:53
【问题描述】:
我刚刚在 Ubuntu 上安装了 MySQL,root 用户无法登录 :)
如何找回或找出我的密码?使用空白作为密码不起作用。
【问题讨论】:
我刚刚在 Ubuntu 上安装了 MySQL,root 用户无法登录 :)
如何找回或找出我的密码?使用空白作为密码不起作用。
【问题讨论】:
您可以通过使用--skip-grant-tables 运行服务器来重置root 密码,并通过以root 身份(或使用sudo)运行以下命令而不使用密码登录:
# 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),我注意到 mysql 会如果我使用 sudo 连接,请接受我的新凭据。即sudo mysql -u root -p 没有 sudo 我得到Access denied for user 'root'@'localhost'。我以前从来没有使用过 sudo,我没有看到这里提到它,但经过一个令人沮丧的小时后,这似乎是解决方案。
sudo,现在我必须使用吗?我不明白为什么我必须是 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
sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD_HERE';
FLUSH PRIVILEGES;
mysql -u root -p # and it works
【讨论】:
5.7.27。
Ubuntu 14.04 上的 MySQL 5.5 需要的命令与推荐的 here 略有不同。简而言之:
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;
the cited source 也提供了另一种方法。
【讨论】:
--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>
【讨论】:
嗯,Mysql 5.7.13 重置我所做的一切是:
$ sudo service mysql stop 停止mysql
$ mysqld_safe --skip-grant-tables &启动mysql
$ mysql -u root
就像正确答案一样。然后我所做的就是做@eebbesen 所做的事情。
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('NEW-password-HERE');
希望它可以帮助任何人:)
【讨论】:
这是设置 root 密码的最佳方法:Source Link 第 3 步对我来说非常有效。
给你的命令
- sudo mysql
- SELECT user,authentication_string,plugin,host FROM mysql.user;
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 刷新特权;
- SELECT user,authentication_string,plugin,host FROM mysql.user;
- 退出
现在您可以使用 root 用户的密码是 'password' :
- mysql -u root -p
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
- 将所有权限授予 . 到 'sammy'@'localhost' 并使用 GRANT 选项;
- 刷新特权;
- 退出
测试您的 MySQL 服务和版本:
systemctl status mysql.service
sudo mysqladmin -p -u root version
【讨论】:
在 MYSQL 5.7 下,如果您使用 mysql 进行开发,只需:
1.杀死mysql:
$ sudo service mysql stop
2.在--skip-grant-tables模式下启动mysql:
$ sudo mysqld_safe --skip-grant-tables
此外,您可以尝试在“skip-grant-table”模式下更改用户表,但我失败了。
所以,这只是一种解决方法。
【讨论】:
有一个简单的解决方案。
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/en/linux-installation-yum-repo.html
【讨论】:
其实很简单。你不必经历很多事情。 只需在终端中运行以下命令并按照屏幕上的说明进行操作即可。
sudo mysql_secure_installation
【讨论】:
我将在这里做一些假设,因为我不确定。我认为我的 MySQL(在最新的 20.04 升级版上运行)甚至没有根。我试过设置一个,我记得有问题。我怀疑没有 root 用户,如果你以 root 身份登录,它会自动以 MySQL root 用户身份登录。
我为什么会这样想?因为当我执行 MySQL -u root -p 时,它会接受任何密码并在我以 root 身份登录时以 MySQL root 用户身份登录。
我已确认在非 root 用户上尝试此操作无效。
我喜欢这个模型。
EDIT 2020.12.19: 对我来说,为什么如果您以 root 用户身份登录,您会以 root 用户身份登录 MySQL,这不再是一个谜。它与身份验证类型有关。更高版本的 MySQL 配置了 MySQL 插件“auth_socket”(也许您已经注意到系统上的 /run/mysqld/mysqld.sock 文件并想知道它)。该插件使用库 auth_socket.so 提供的 SO_PEERCRED 选项。
如果需要,您可以通过创建/更新密码来恢复密码身份验证。为了清楚起见,在下面显示了两种方式和选项。
创建用户 'valerie'@'localhost' 用 auth_socket 识别;
CREATE USER 'valerie'@'localhost' IDENTIFIED BY 'password';
【讨论】: