Mysql 已在我的系统上启动并运行,但我无法以任何用户身份登录。我也无法启动/停止/查看服务器状态。我得到的只是:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
/usr/bin/mysqladmin: connect to server at 'localhost' failed
错误:'拒绝用户'debian-sys-maint'@'localhost' 访问(使用密码:是)
从日志中:
Mar 24 08:30:13 debian /etc/mysql/debian-start[1074]: Upgrading MySQL tables if necessary.
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: Looking for 'mysql' as: /usr/bin/mysql
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' '--host=localhost' '--socket=/var/run/mysqld/mysqld.sock' '--host=localhost' '--socket=/var/run/mysqld/mysqld.sock'
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: /usr/bin/mysqlcheck: Got error: 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES) when trying to connect
Mar 24 08:30:13 debian /etc/mysql/debian-start[1078]: FATAL ERROR: Upgrade failed
Mar 24 08:30:13 debian /etc/mysql/debian-start[1111]: Checking for insecure root accounts.
我可以在终止进程后登录并启动 mysql,mysqld --skip-grant-tables
但我无法重置 debian-sys-maint 密码:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'mypass';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
更新
我UPDATE mysql.user set password=PASSWORD('secret') where user='debian-sys-maint';
可以重置我的密码,但重新启动后,我再次遇到与该用户/mysql 相同的问题。
我该如何重置此密码以及为什么 mysql 停止工作?
答案1
您可以像这样手动启动 mysql 服务器:
$ sudo mysqld --skip-grant-tables
然后,您应该能够在没有有效密码的情况下登录。要解决用户debian-sys-maint
问题,您可以从文件中获取密码/etc/mysql/debian.cnf
。用您在此文件中找到的密码覆盖此用户的当前密码。此外,如果您忘记了 root 密码,请不要忘记覆盖它。
完成后,正常重新启动 mysqld。
答案2
当使用 skip grant 运行时,您必须使用以下命令重置密码:
UPDATE mysql.user set password=PASSWORD('secret') where user='debian-sys-maint';
而不是 GRANT。
(我没有测试语法是否正确。但只是对 mysql.user 表进行了更新!)