2012-07-25 207 views
32

我有问题与MySQL。我试图执行此:访问被拒绝用户debian-sys-maint

echo "show databases" | mysql -B -N 

但我得到:

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES) 

但是,当我前高管:

/etc/init.d/mysql restart 

我得到了一个 'OK'。

我做

GRANT ALL PRIVILEGES on *.* TO [email protected] IDENTIFIED BY PASSWORD 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES; 

其中password是从/etc/mysql/debian.cnf。但它没有帮助。 (当然我刷新priv并重新启动mysql)。

回答

15

的问题是,你的GRANT语句使用IDENTIFIED BY PASSWORD条款,在这种情况下的MySQL期望获得散列密码,而不是明文的。如果您希望提供明文密码,请使用IDENTIFIED BY 'your password'

87

这是因为Debian有一个MySQL帐户debian-sys-maint用于打开/关闭和检查状态。该用户的密码应与存储在/etc/mysql/debian.cnf中的密码相同。该文件是这样的:

# Automatically generated for Debian scripts. DO NOT TOUCH! 
[client] 
host  = localhost 
user  = debian-sys-maint 
password = <password> 
socket = /var/run/mysqld/mysqld.sock 
[mysql_upgrade] 
host  = localhost 
user  = debian-sys-maint 
password = <password> 
socket = /var/run/mysqld/mysqld.sock 
basedir = /usr 

如果密码不匹配(例如,由于您手动更改它)的初始化脚本将不再工作。你应该根据文件设置密码。所以

mysql -u root -p 
# Then type MySQL root password 
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>'; 
+0

我有场[客户]和[mysql_upgrade在/etc/mysql/debian.cnf。密码在用户的文件和数据库中是相同的。 – 2012-07-25 08:44:05

+1

是的,您只需 - 更新密码,因为这个过程对于每个安装都是唯一的。 例如:你从一台服务器移到DATA_DIR到另一个,所以通不匹配 – 2014-08-20 15:30:46

3

恢复debian-sys-maint用户的最简单方法是重新配置mysql-server-5.5包。如果您知道MySQL root用户的密码,则可以尝试在/etc/mysql/debian.cnf中恢复用户及其密码。

sudo dpkg-reconfigure mysql-server-5.5 

注意:如果无法停止mysql pid,只需运行sudo killall mysqld即可。这是重新配置mysql-server-5.5所必需的。

+0

这并不工作。 – specializt 2015-04-11 07:26:10

+0

@specializt。它解决了我的问题。注意上述符号。 – shgnInc 2015-04-11 08:07:14

+0

为什么我要“小心”一些“符号”?这没有任何意义。 – specializt 2015-04-11 08:45:19