如何在 CentOS7 上更改 MySQL root 帐户密码?

Posted

技术标签:

【中文标题】如何在 CentOS7 上更改 MySQL root 帐户密码?【英文标题】:How to change the MySQL root account password on CentOS7? 【发布时间】:2016-02-04 06:12:26 【问题描述】:

我在 Centos7 虚拟机上安装了 mysql,但我在使用 root 登录时遇到了问题。我尝试不使用密码登录或尝试任何默认密码(如 mysql、admin 等)我查看了 my.cnf 文件并且没有密码。我尝试通过停止服务并使用mysqld_safe --skip-grant-tables & 重新启动它来更改密码,但我得到了mysqld_safe:command not found 我不知道还能做什么。任何提示/想法将不胜感激!

【问题讨论】:

您需要指定命令的完整路径。如果您不知道那是什么,find 是您的朋友。密码不会,不应该my.cnf表示。 【参考方案1】:

您使用的是哪个版本的 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


    systemd 现在用于管理 mySQL,而不是 mysqld_safe(这就是您收到 -bash: mysqld_safe: command not found 错误的原因 - 它没有安装)

    user 表结构已更改。

因此,要重置 root 密码,您仍然使用 --skip-grant-tables 选项启动 mySQL 并更新 user 表,但是您的操作方式已经改变。

1. Stop mysql:
systemctl stop mysqld

2. Set the mySQL environment option 
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. Start mysql usig the options you just set
systemctl start mysqld

4. Login as root
mysql -u root

5. Update the root user password with these mysql commands
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
    -> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

*** Edit ***
As mentioned my shokulei in the comments, for 5.7.6 and later, you should use 
   mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
Or you'll get a warning

6. Stop mysql
systemctl stop mysqld

7. Unset the mySQL envitroment option so it starts normally next time
systemctl unset-environment MYSQLD_OPTS

8. Start mysql normally:
systemctl start mysqld

Try to login using your new password:
7. mysql -u root -p

参考

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

注意

从 MySQL 5.7.6 开始,使用 RPM 安装 MySQL 分发、服务器启动和关闭由 systemd on 管理 几个 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底部

【讨论】:

谢谢!这个解决方案奏效了。我的系统没有找到mysql_safe ..我不知道为什么这没有标记为解决方案。 终于找到了清晰的工作说明。到处都提到了mysqld_safe命令,但是在我的RedHat上找不到。 @Kevin Jones 'mysql -u root' 给我一个错误“用户'root'@'localhost'的访问被拒绝(使用密码:否)” 这在 CentOS 7 和 MySQL CE v8.0.32-1.el7 刚刚(2020 年 8 月 2 日)不起作用。第 5 步(“UPDATE ...”或“ALTER USER...”)的备选方案均无效。可悲的是,如果没有“--skip-grant-tables”选项,我现在无法让 systemctl 启动。此时最简单的方法是删除并重建 VM。 正如汤姆所说,这些说明都不起作用。在我删除skip-grant-tables 的那一刻,它再次显示“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)”。我使用的是 MariaDB 版本:mysql Ver 15.1 Distrib 10.3.17-MariaDB,这是 YUM 在 CentOS 8 上安装的。【参考方案2】:

我使用了上面 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

那时我可以登录了。

【讨论】:

@user48918 'mysql -u root' 给我一个错误“用户'root'@'localhost'的访问被拒绝(使用密码:否)”【参考方案3】:

使用以下步骤重置密码。

$ sudo systemctl start mysqld

重置 MySql 服务器根密码。

$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/

【讨论】:

据我了解,这仅在首次创建服务器时有效。 grep 命令所做的只是找到临时密码,而不是设置它。【参考方案4】:

对于 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

【讨论】:

效果很好! 这对我有用,我不明白为什么为了启动 MySQL 或 MariaDB,centos 必须给你废话,我经历了很多才到这里! 不起作用。即便如此,当我删除 MYSQLD_OPTS 并输入正确的密码时,命令行仍显示 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)。使用最新版本 - mysql Ver 15.1 Distrib 10.3.17-MariaDB @PKHunter 随意上传您的步骤视频。然后我会告诉你问题出在哪里以及如何解决它。另外,请记住,这些说明已针对 MariaDB 10.4 发布。你发布的版本是10.3。所以这些步骤不适用于您的版本。 @PKHunter 感谢您的理解。我会看看你的新问题,但可能需要一两个小时,因为我可能必须先用 CentOS 8 设置一个 VM。【参考方案5】:

全部,

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

第 1 步。第一次停止你的数据库

service mysqld stop

第二步。第二修改/etc/my.cnf文件添加“skip-grant-tables”

vi /etc/my.cnf

[mysqld] 跳过授予表

第三步。第三次启动mysql

service mysqld start

第四步。选择mysql默认数据库

mysql -u root

mysql>use mysql;

第四步。设置新密码

mysql&gt; update user set authentication_string=PASSWORD("yourpassword") where User='root';

step5重启mysql数据库

service mysqld restart

 mysql -u root -p

享受:)

【讨论】:

请注意,完成后,skip-grant-tables 应该从 my.cnf 中删除。这是不安全的,因为它不需要密码。这不是很合理的建议。【参考方案6】:

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

mysqld_safe --skip-grant-tables

它可能会正常工作

【讨论】:

【参考方案7】:

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

    设置 mySQL 环境选项 systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

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

    以 root 身份登录 mysql -u root

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

【讨论】:

以上是关于如何在 CentOS7 上更改 MySQL root 帐户密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不清除数据库的情况下重新加载 Roo 项目?

Linux Centos7 Mysql 忘记密码怎么找回密码

Centos7.3,mysql5.7环境,数据存储空间加大调整方案。

Linux平台安装配置MySQL数据库

centos7解决yum install mysql-server没有可用包?

centos删除/home所在的lv后如何恢复