即使在使用--skip-grant-tables重新启动后,也无法以root身份登录到mysql

时间:2013-03-01 07:42:17

标签: mysql root

我在FreeBSD 7.3上运行MySQL 5.0.77。 MySQL root密码丢失了,我想重置它。但我有以下问题。

我停止了MySQL,并使用--skip-grant-tables选项重新启动:

/usr/local/etc/rc.d/mysqld start --skip-grant-tables

服务启动,但是当我尝试在没有密码的情况下登录时:

 mysql -u root

我收到了这个回复:

  

ERROR 1045(28000):用户'root'@'localhost'拒绝访问(使用密码:NO)

我可以以其他用户(缺少SUPERUSER权限)登录,但不能以root身份登录。谁知道我做错了什么?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我刚刚过了一些类似的情况,经过一些挫折后,我意识到我的计算机中运行了2个MySQL安装,一个在我的操作系统中,一个安装在本地服务器包中。在我的情况下,这个烦人的情况刚刚解决了关闭我的操作系统的SQL服务

答案 2 :(得分:0)

我尝试使用sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"重新启动了mariadb服务器,但仍然遇到sudo mysql -u root拒绝访问的错误。

对我有用的是:

sudo systemctl stop mariadb
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
sudo mysql -u root

现在在mysql控制台中:

FLUSH PRIVILEGES;

我做了一个错误:

SET PASSWORD FOR root@'localhost' = PASSWORD('password');

但这可行:

UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

完成:

FLUSH PRIVILEGES;
exit

回到shell:

sudo /etc/init.d/mysql stop

对我来说,我仍然可以使用mysql -u root进行连接,因此我以一种不好的方式停止了服务器:使用ps -aux | grep mysql获取PID并使用sudo kill -9 <pid>终止它们

一旦我们确定mysql服务器未运行,请以正常方式重启:

sudo systemctl start mariadb

现在将再次需要密码,但是我们知道什么是root密码。

在最终systemctl start mariadb之前,为了安全起见,可能希望运行sudo systemctl set-environment MYSQLD_OPTS=""