我继承了一个安装了mysql的服务器。我没有任何用户的mysql密码,甚至没有root(虽然我有linux root密码)。另外,我只知道另一个用户帐户besdies root,并且没有权限执行任何操作,甚至没有SELECT。
我尝试停止mysql servicw,使用skip grant tables选项重新启动,只是在没有密码的情况下登录:
service mysqld stop
service mysqld start --skip-grant-tables &
mysql -u root
但是得到以下错误:
Access denied for user 'root'@'localhost' (using password: NO)
然后我尝试重置密码:
mysqladmin -u root password 'newpw'
但这也会导致拒绝访问错误。
我还尝试以其他用户身份登录(不使用pw)并执行以下命令:
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
并收到此错误:
ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'
我也试过删除mysql并重新安装,但我得到了同样的错误。
有什么建议吗?
答案 0 :(得分:34)
尝试sudo dpkg-reconfigure mysql-server-5.5
,系统会要求您输入新的root密码。
将5.5替换为您当前的mysql-server版本
答案 1 :(得分:7)
答案 2 :(得分:3)
您需要确保使用sudo命令以root身份运行命令。
我发现这个instruction用于重置mysql密码效果很好。
按照此过程,您将禁用MySQL服务器上的访问控制。所有连接都将具有root访问权限。从网络上拔下服务器或至少禁用远程访问是一件好事。
要重置mysqld密码,请按照以下说明操作:
Stop the mysql demon process using this command :
sudo /etc/init.d/mysql stop
Start the mysqld demon process using the --skip-grant-tables option with this command
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
因为此时您没有检查用户权限,所以禁用网络是最安全的。在Dapper中,/ usr / bin / mysqld ...没有用。但是,mysqld --skip-grant-tables确实。
start the mysql client process using this command
mysql -u root
from the mysql prompt execute this command to be able to change any password
FLUSH PRIVILEGES;
Then reset/update your password
SET PASSWORD FOR root@'localhost' = PASSWORD('password');
If you have a mysql root account that can connect from everywhere, you should also do:
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
Alternate Method:
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = 'localhost' AND User = 'root';
And if you have a root account that can access from everywhere:
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = '%' AND User = 'root';
对于任何一种方法,一旦收到指示查询成功的消息(受影响的一行或多行),就会刷新权限:
FLUSH PRIVILEGES;
然后停止mysqld进程并以经典方式重新启动它:
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
答案 3 :(得分:2)
`UPDATE mysql.user SET Password = PASSWORD('MyNewPass')WHERE User ='root'; FLUSH PRIVILEGES;
将UPDATE和FLUSH语句分别写在一行上。 UPDATE语句重置所有root帐户的密码,FLUSH语句告诉服务器将授权表重新加载到内存中,以便它通知密码更改。
答案 4 :(得分:0)
对于Ubuntu 16.04上的mysql 5.7.16,这有效:
无密码登录:
sudo mysqld_safe --skip-grant-tables --skip-networking&
更改密码:
设置密码' root' @' localhost' =' mypass';
答案 5 :(得分:-1)
在我的情况下发生了同样但我在登录mysql提示时犯了错误。 我是用mysql而不是mysql -u root -p
做的