无法以 root linux 用户身份运行 mysql 命令

Posted

技术标签:

【中文标题】无法以 root linux 用户身份运行 mysql 命令【英文标题】:Can't run mysql commands as root linux user 【发布时间】:2022-01-07 12:43:37 【问题描述】:

作为 linux root 用户:

root@local:~# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost'(使用 密码:否)

我很困惑。 root 用户不应该能够在没有额外身份验证的情况下运行mysql 吗?我该如何解决这个问题?

【问题讨论】:

如果你只运行mysql root 用户应该没有密码 mysql -u root -p 怎么样?它要求输入密码吗? 如果我指定mysql用户当然会要求输入密码,但我不想提供密码,我想以linux root身份运行mysql命令而不需要密码。 this 或 this 是否适合您? 不,这些答案仍然需要某种方式的密码 【参考方案1】:

您在 MySql 中的 root 帐户有密码。试试这个

mysql -p

并输入您或其他人设置的密码。

如果不行,试试

mysql -h localhost -u root -p

那个不起作用,你需要重置你的 MySql 根密码。这是关于“toobz”的几个教程的主题

【讨论】:

mysql -p 要求 root linux 帐户能够在不提供密码的情况下运行 mysql。这是我的问题。 @Dan 您的问题是您的 root 用户有密码,而您想在没有密码的情况下登录。这是不可能的【参考方案2】:

如果 MySQL root 用户有密码,使用默认的身份验证插件,那么你必须提供密码才能连接,句号。您可以配置一个没有密码的帐户,但这是您应该避免的习惯。

您可以通过以下任何一种方式提供密码:

使用-p 选项以交互方式输入 在命令行中以明文形式输入,如-p<mypassword>~/.my.cnf 文件的[client] 部分中以纯文本形式存储它(请参阅https://dev.mysql.com/doc/refman/8.0/en/option-files.html) 将其以模糊的形式存储在您的 ~/.mylogin.cnf 文件中(请参阅 https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html)。

还有一种方法可以通过环境变量提供密码,但现在不鼓励这样做,因为它真的不安全。

【讨论】:

auth_socket 呢? 如果您创建要使用 auth_socket 插件进行身份验证的 root 用户(例如:CREATE USER 'root'@'localhost' IDENTIFIED WITH auth_socket),这将起作用,但如果 root 用户是以传统方式创建的,则使用密码进行身份验证,则 auth_socket 将不起作用。 我不明白我设置的最后一个服务器是如何默认设置 auth_socket 而这个新服务器没有。我正在尝试编写一个安装脚本来初始化 mysql 数据库,并且我想运行 mysql 命令。我要么需要使用 auth_socket(显然不是默认值),要么能够在 bash 脚本中提供 root 密码(-p 似乎不起作用,即使您提供了值它也会提示输入密码)。 请注意,在命令行上提供密码值要求您在 -p 和密码之间没有空格。即-p password 错误,它会将密码解释为下一个参数。您必须像 -ppassword 一样指定它。 我不知道谁设置了您的最后一个服务器或它是什么版本。也许是 MariaDB? MariaDB 不是 MySQL。它们改变了很多特性,其中之一是创建 root 用户以默认使用 auth_socket,参见。 mariadb.com/kb/en/authentication-plugins【参考方案3】:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

【讨论】:

以上是关于无法以 root linux 用户身份运行 mysql 命令的主要内容,如果未能解决你的问题,请参考以下文章

sh 在linux中创建用户(以root身份运行)

Sudo漏洞允许非特权Linux和macOS用户以root身份运行命令

Linux C 编程以用户身份执行

以不同用户身份运行 Linux 服务的最佳实践

Golang如何让子进程以另一个用户身份运行

如何以 root 身份运行 Perl 脚本但仍会影响用户 gconf 设置