我正在尝试运行mysqlcheck
。但运行失败,错误信息如下:
$ sudo su -
# mysqlcheck --auto-repair --all-databases
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
其他问题和答案都说要修改或重置 MySQL 密码。我真的不想这么做,因为我不知道会有什么影响。如果有任何脚本使用它,那么我会破解它们。至少,我必须与另外两个 [兼职] 系统管理员共享它,所以这大多是一件麻烦事。
我希望 MySQL 能够识别机器的根用户 (uid 0),并授予其根用户的所有权限。
我在 CentOS 7.2 上工作。如何让 MySQL 授予 root 用户权限?
以下是一些相关问题。它们都与修改密码有关。
答案1
在 MySQL 5.5+ 中,你可以使用身份验证套接字身份验证插件:
CREATE USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
MariaDB 5.2.0+ 具有类似的unix_socket插件 – 据我所知,它默认是活动的:
INSTALL PLUGIN unix_socket SONAME 'auth_socket';
CREATE USER root IDENTIFIED VIA unix_socket;
类似地,PostgreSQL 具有“本地”身份验证方法pg_hba.conf
并默认启用它。
在 Unix 上,一般机制通常称为“皮尔克里”,如SO_PEERCRED
。 (Windows 等效项通常称为“Windows 本机身份验证”。)
答案2
根据你所说的内容,我将假设你的 MySQL 用户'root'@'localhost'
有密码,因为你提到与其他人共享。因此,我还假设你仍然知道该密码。
现在让我们看看错误信息是什么:
Access denied for user 'root'@'localhost' (using password: NO)
所以我在这里看到的是,你试图在不提供密码的情况下连接到 MySQL,而 mysql-user 有密码。显然这是行不通的。
我敢打赌它mysqlcheck --auto-repair --all-databases -p
一定能用。它会要求输入密码,然后您就可以开始了。
尽管如此,我强烈建议不要将 MySQL-root 帐户用于除管理 MySQl 服务器之外的其他用途(因为您提到过If there are any scripts using it
),只需为该脚本创建另一个具有适当权限的 MySQL 用户即可。如果您真的需要重置 root 密码,告诉另外两个同事应该不是什么大问题,对吧?如果是,我会评估贵公司的沟通方式……