在Centos7上更改mysql root密码

时间:2015-11-03 22:20:07

标签: mysql centos

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

7 个答案:

答案 0 :(得分:202)

您使用的是哪个版本的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表结构已更改。

  3. 因此,要重置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

    的底部

答案 1 :(得分:11)

使用以下步骤重置密码。

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

答案 2 :(得分:11)

我使用了Kevin Kevin的建议以及以下--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

到那时我已经可以登录了。

答案 3 :(得分: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

的[mysqld] 跳过授权-表

步骤3。第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';

step5重启mysql数据库

service mysqld restart

 mysql -u root -p

享受:)

答案 4 :(得分:3)

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

mysqld_safe --skip-grant-tables

它可以正常工作

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

  1. 设置mySQL环境选项 systemctl set-environment MYSQLD_OPTS =&#34; - skip-grant-tables&#34;

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

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

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