错误 1045(28000):拒绝用户“root”@“localhost”访问(使用密码:是) Debian。
mysqld 据称正在监听 3306
Telnet 至 3306 有效
还尝试将其专门绑定到 localhost,然后绑定到 127.0.0.1,但没有任何区别
然而:
# netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING 78993 /var/run/mysqld/mysqld.sock
# mysql -P3306 -ptest
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
我尝试过的事情:
dpkg-reconfigure mysql-server-5.1 Doesn't help
http://www.debian-administration.org/articles/442没有帮助
此命令(来源):
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
事实上没有帮助:
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
那么该用户可能会被删除吗?可能性极小,因为这一切都是在一位同事更新软件包后发生的,一些单独的服务开始出现问题,但我的同事说他删除了违规者。
还有更多:# mysqld_safe --skip-grant-tables
运行时,只有使用有效密码才能访问数据表!因此,存在用户,并且会发生一些身份验证,因此出现0 rows affected
上述情况。
权限表是否会以某种方式被损坏?当我获取 mysql 控制台的唯一方法是跳过它们时,我该如何重新创建/恢复它们?
我可以省去重新安装 MySQL 的麻烦吗?无论如何,现在我可以使用上述模式进入,因此我确实获得了数据库的转储。
答案1
基本上从 https://stackoverflow.com/questions/1709078/how-can-i-restore-the-mysql-root-users-full-privileges
我走进# mysqld_safe --skip-grant-tables
开了一个# mysql -u root
做过
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
做了正常的事情/etc/init.d/mysql start
(在杀死特殊实例之后)
再次
# mysql -u root
然后
UPDATE mysql.user SET Password=PASSWORD('yrpass') WHERE User='root';
Root 有通行证。其他 mysql 用户在需要时也同样有通行证。
我发现根本没有任何特权/授权 - 无论--skip-grant-tables
。
使用 MySQL Workbench 首先 让root成为DBA但事实并非如此。
之后,我不得不恢复其他几个用户。幸运的是,我有table_priv
之前的转储(在这一切发生之前),因此每个表的恢复应该没问题,但这只是我的情况。
还我有几个 root 用户,'%'
'localhost'
'127.0.0.1'
其中一些用户有旧通行证。无需启动特殊实例,--skip-grant-tables
我就可以与用户一起进入debian-sys-maint
,然而由于导入了其他系统的转储,所以密码不同!我通过查看解决了这个问题本文
我不知道最初是什么导致了这一切,有待讨论。