如何在CentOS7上修改MySQL root账户密码?

问题描述 投票:0回答:7

我已在 Centos7 虚拟机上安装了 mySQL,但使用 root 登录时遇到问题。我尝试不使用密码登录或尝试任何默认密码(例如 mysql、admin 等),我查看了 my.cnf 文件,但没有密码。我尝试通过停止服务并使用

mysqld_safe --skip-grant-tables &
重新启动来更改密码,但我明白了
mysqld_safe:command not found
我不知道还能做什么。任何提示/想法将不胜感激!

mysql centos
7个回答
328
投票

您使用的 mySQL 版本是什么?我使用的是 5.7.10,并且以 root 身份登录时遇到了同样的问题

有两个问题 - 为什么我不能以 root 身份登录开始,以及为什么我不能使用 'mysqld_safe` 启动 mySQL 来重置 root 密码。

我没有在安装过程中设置 root 密码的答案,但您可以按照以下步骤重置 root 密码

编辑安装时的初始root密码可以通过运行找到

grep 'temporary password' /var/log/mysqld.log

http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html


  1. systemd
    现在用于管理 mySQL,而不是
    mysqld_safe
    (这就是为什么您会收到
    -bash: mysqld_safe: command not found
    错误 - 它未安装)

  2. user
    表结构已更改。

因此,要重置 root 密码,您仍然使用

--skip-grant-tables
选项启动 mySQL 并更新
user
表,但操作方式已更改。

  1. 停止MySQL:

    sudo systemctl stop mysqld
    
  2. 设置MySQL环境选项:

    sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
    
  3. 使用您刚刚设置的选项启动 MySQL:

    sudo systemctl start mysqld
    
  4. 以 root 身份登录

    mysql -u root
    
  5. 使用这些 mysql 命令更新 root 用户密码:

    mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
        -> WHERE User = 'root' AND Host = 'localhost';
    mysql> FLUSH PRIVILEGES;
    mysql> quit
    

    *** 编辑*** 正如我在评论中提到的 shokulei,对于 5.7.6 及更高版本,您应该使用:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
    

    否则你会收到警告

  6. 停止MySQL

    sudo systemctl stop mysqld
    
  7. 取消设置MySQL环境选项,以便下次正常启动:

    sudo systemctl unset-environment MYSQLD_OPTS
    
  8. 正常启动MySQL:

    sudo systemctl start mysqld
    
  9. 尝试使用您的新密码登录:

    mysql -u root -p
    

参考

正如它所说的 http://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html

注意

从 MySQL 5.7.6 开始,使用 RPM 安装 MySQL 分发,服务器启动和关闭由systemd管理 几个 Linux 平台。在这些平台上,mysqld_safe 不再 安装,因为没有必要。有关详细信息,请参阅部分 2.5.10,“使用 systemd 管理 MySQL 服务器”。

这会将您带到 http://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html,其中在页面底部提到了

systemctl set-environment MYSQLD_OPTS=

密码重置命令位于http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

底部

28
投票

我使用了上面 Kevin Jones 的建议,并进行了以下 --skip-networking 更改以提高安全性:

sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

[user@machine ~]$ mysql -u root

然后,当我尝试重置密码时,我收到了一个错误,但在其他地方搜索表明我可以继续前进。以下工作有效:

mysql> select user(), current_user();
+--------+-----------------------------------+
| user() | current_user()                    |
+--------+-----------------------------------+
| root@  | skip-grants user@skip-grants host |
+--------+-----------------------------------+
1 row in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
[user@machine ~]$ systemctl stop mysqld
[user@machine ~]$ sudo systemctl unset-environment MYSQLD_OPTS
[user@machine ~]$ systemctl start mysqld

那时我就可以登录了。


13
投票

使用以下步骤重置密码。

$ sudo systemctl start mysqld

重置MySql服务器root密码。

$sudo grep 'temporary password' /var/log/mysqld.log

输出类似-:

 10.744785Z 1 [Note] A temporary password is generated for root@localhost: o!5y,oJGALQa

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

<pre>
    $ sudo mysql_secure_installation
</pre>
   Securing the MySQL server deployment.

   Enter password for user root: 

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

$ mysql -u root -p

http://gotechnies.com/install-latest-mysql-5-7-rhelcentos-7/


11
投票

对于 CentOS 7MariaDB 10.4,我通过以下命令取得了成功:

su -
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --user=mysql"
systemctl restart mariadb
mysql -u root

flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
flush privileges;
quit

systemctl unset-environment MYSQLD_OPTS
systemctl restart mariadb

9
投票

全部,

这里 mysql-community-server 5.7 有一点变化 我分享一些步骤,如何重置mysql5.7 root密码或设置密码。它也适用于 centos7 和 RHEL7。

步骤1。停止你的数据库

service mysqld stop

步骤2。修改

/etc/my.cnf
文件添加“skip-grant-tables”

vi /etc/my.cnf
[mysqld]
skip-grant-tables

步骤3。启动mysql

service mysqld start

步骤4。选择mysql默认数据库

mysql -u root

mysql>use mysql;

步骤4。设置新密码

mysql> update user set authentication_string=PASSWORD("yourpassword") where User='root'

步骤5。从

skip-grant-tables
文件中删除
/etc/my.cnf

步骤6。重启mysql数据库

service mysqld restart

mysql -u root -p

享受:)


2
投票

请使用以下命令停止所有 MySQL 服务 /etc/init.d/mysqld 停止 之后用这个

mysqld_safe --skip-grant-tables

它可以正常工作


1
投票

对我来说,工作是这样的: 1.停止mysql: systemctl 停止 mysqld

  1. 设置mySQL环境选项 systemctl 设置环境 MYSQLD_OPTS="--skip-grant-tables"

  2. 使用您刚刚设置的选项启动 mysql systemctl 启动 mysqld

  3. 以 root 身份登录 mysql -u root

  4. 登录后我使用FLUSH PRIVILEGES;告诉服务器重新加载授权表,以便帐户管理语句起作用。 如果我不这样做,我在尝试更新密码时会收到此错误: “在用户表中找不到任何匹配的行”

© www.soinside.com 2019 - 2024. All rights reserved.