在Centos7上更改mysql root密码

Key*_*ume 49 mysql centos

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

Kev*_*nes 241

您使用的是哪个版本的mySQL?我正在使用5.7.10并以root身份登录时遇到同样的问题

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

我在安装过程中没有设置root密码的答案,但是这是重置root密码的方法

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

grep 'temporary password' /var/log/mysqld.log
Run Code Online (Sandbox Code Playgroud)

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. 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
Run Code Online (Sandbox Code Playgroud)

参考

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的底部

  • 最后,我找到了明确的工作说明。到处都提到了mysqld_safe命令,但是在我的RedHat上找不到。 (3认同)
  • 正如汤姆所说,这些说明都不起作用。当我删除“skip-grant-tables”时,它再次显示““错误1045(28000):用户'root'@'localhost'访问被拒绝(使用密码:YES)”。我正在使用 MariaDB 版本:`mysql Ver 15.1 Distrib 10.3.17-MariaDB`,这是 YUM 在 CentOS 8 上安装的版本。 (3认同)
  • 目前(2020 年 8 月 2 日)这对于 CentOS 7 和 MySQL CE v8.0.32-1.el7 不起作用。步骤 5 的替代方案(“更新...”或“更改用户...”)都不起作用。遗憾的是,我现在无法在没有“--skip-grant-tables”选项的情况下启动 systemctl。此时,最简单的方法是删除并重建虚拟机。 (2认同)

use*_*918 13

我使用上面的凯文琼斯的建议与以下--skip-networking更改,以获得更好的安全性:

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

[user@machine ~]$ mysql -u root
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试重置密码时,我收到了一个错误,但谷歌搜索其他地方表示我可以简单地进行.以下工作:

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
Run Code Online (Sandbox Code Playgroud)

那时我能够登录.

  • @user48918 'mysql -u root' 给我一个错误“用户'root'@'localhost'访问被拒绝(使用密码:NO)” (2认同)

小智 11

使用以下步骤重置密码.

$ sudo systemctl start mysqld
Run Code Online (Sandbox Code Playgroud)

重置MySql服务器root密码.

$sudo grep 'temporary password' /var/log/mysqld.log
Run Code Online (Sandbox Code Playgroud)

输出像 - :

 10.744785Z 1 [Note] A temporary password is generated for root@localhost: o!5y,oJGALQa
Run Code Online (Sandbox Code Playgroud)

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

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

   Enter password for user root: 
Run Code Online (Sandbox Code Playgroud)

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

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

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


lau*_*jpn 8

对于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
Run Code Online (Sandbox Code Playgroud)


小智 7

所有,

这里有一点点用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
Run Code Online (Sandbox Code Playgroud)

[mysqld] skip-grant-tables

第3步.第3次启动mysql

service mysqld start

第4步.选择mysql默认数据库

mysql -u root

mysql>use mysql;
Run Code Online (Sandbox Code Playgroud)

第4步.设置一个新密码

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

step5重启mysql数据库

service mysqld restart

 mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

请享用 :)