How do I find out my root MySQL password?

I just installed MySQL on Ubuntu and the root user can't log in :)

How can I recover or find out my password? Using blank for password does not work.

186067 次浏览

您可以通过使用 --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';

我意识到这是一个老的线程,但我认为我应该更新我的结果。

Alex 听起来像是你通过元包“ MySQL-server”安装了 MySQL 服务器。这将通过引用安装最新的包(在我的示例中是 mysql-server-5.5)。和您一样,我在安装时没有像预期的那样被提示输入 MySQL 密码。我想有两个答案:

解决方案 # 1: 使用 MySQL 的全名安装 MySQL:

$ sudo apt-get install mysql-server-5.5

或者

解决方案 # 2: 重新配置包..。

$ sudo dpkg-reconfigure mysql-server-5.5

You must specific the full package name. Using the meta-package 'mysql-server' did not have the desired result for me. I hope this helps someone :)

参考资料: https://help.ubuntu.com/12.04/serverguide/mysql.html

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;

引用的来源也提供了一种替代方法。

对于 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下,如果您使用 MYSQL 进行开发,只需:

1. kill mysql:

$ sudo service mysql stop

2. 在—— Skip-Grant-tables 模式下启动 mysql:

$ sudo mysqld_safe --skip-grant-tables

此外,您还可以尝试在“ Skip-Grant-table”模式下更改用户表,但是我失败了。

所以,这只是个权宜之计。

嗯 Mysql 5.7.13重置我所做的就是:

停止 mysql

启动 mysql

$ mysql -u root

就像正确的答案。然后我所做的就是做@eebbesen 所做的。

mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('NEW-password-HERE');

希望这对大家有所帮助:)

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

There is a simple solution.

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

下面是设置 root 密码的最佳方法: 资料来源连结步骤3对我来说非常有效。

你的命令

  1. Sudo mysql
  2. SELECT 用户、认证 _ 字符串、插件、主机 FROM mysql.user;
  3. ALTER 用户‘ root’@‘ localhost’通过‘ password’标识为 mysql _ nate _ password;
  4. 同花特权;
  5. SELECT user,authentication_string,plugin,host FROM mysql.user;
  6. 出口

现在您可以使用根用户的密码是‘ 密码’:

  1. Mysql-u root-p
  2. 创建用户“ sammy”@“ localhost”,用“ password”标识;
  3. .上的所有特权授予‘ sammy’@‘ localhost’,并附带 GRANT 选项;
  4. 同花特权;
  5. exit

测试 MySQL 服务和版本:

systemctl status mysql.service
sudo mysqladmin -p -u root version

我要做一个假设,因为我不确定。我认为我的 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 _ PEERCRED 选项。所以。

如果需要,只需创建/更新密码,就可以恢复到密码身份验证。下面显示两种方法和选择,以明确。

创建用户‘ valerie’@‘ localhost’IDENTIFIED WITH auth _ socket;
创建用户‘ valerie’@‘ localhost’,通过‘ password’标识;