不使用 sudo 连接到 mysql 服务器

Connect to mysql server without sudo

命令:

mysql -u root -p

报错:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

但是 运行 sudo 权限有效:

sudo mysql -u root -p

是否可以取消 sudo 要求 因为它阻止我在 intellij 中打开数据库?我在这个问题的答案中尝试了以下 Connect to local MySQL server without sudo:

sudo chmod -R 755 /var/lib/mysql/

这没有帮助。上面的问题抛出了不同的错误

在您回答的问题的评论中显示为

Ok, just try to analyze all of the directories down in the path of the socket file, they need to have o+rx and the sock file too (it's not a good idea to make it modifiable by others).

You can also try to remove mysql.sock and then restart mysqld, the file should be created by the daemon with proper privileges.

这似乎适用于 this question(你说你看过的那个)所以它也可能适用于你

错误信息:

“错误 1698 (28000):用户 'root'@'localhost'”的访问被拒绝

表示服务器不允许此用户连接,而不是 mysql 无法访问套接字。

试试这个来解决问题:

登录您的数据库

sudo mysql -u root -p

然后进行这些修改:

MariaDB []>use mysql;
MariaDB [mysql]>update user set plugin=' ' where User='root';
MariaDB [mysql]>flush privileges;
MariaDB [mysql]>exit

不使用 sudo 再次尝试登录

只有 root 用户需要 sudo 才能登录 mysql。我通过创建一个新用户并授予对所需数据库的访问权限来解决此问题:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';

现在 newuser 无需 sudo 即可登录:

mysql -u newuser -p

首先使用 sudo 登录您的 mysql。

然后使用此代码将根用户的“插件”列值从“unix_socket”或“auth_socket”更改为“mysql_native_password”。

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin IN ('unix_socket', 'auth_socket');

FLUSH PRIVILEGES;

最后重新启动 mysql 服务。就是这样。

如果您想了解更多信息,请查看 this link

更新:

在 mysql 或 mariadb 的新版本中,您可以使用:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('your-password');
FLUSH PRIVILEGES;

您需要更改算法。在为我工作之后,

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql > FLUSH PRIVILEGES;

您可以使用以下查询:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

这个查询就够了。

您可以使用相同的 ROOT 用户,或 NEW_USER 并删除 SUDO 权限。下面的示例显示了如何使用 ROOT 删除连接,而不使用 SUDO。

使用 SUDO

连接到 MY-SQL
sudo mysql -u root

从用户中删除当前Root用户Table

DROP USER 'root'@'localhost';

创建一个新的 ROOT 用户(如果需要,您可以创建一个不同的用户)

CREATE USER 'root'@'%' IDENTIFIED BY '';

授予新用户权限 (ROOT)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

刷新权限,以便立即重新加载授权表。 ()

FLUSH PRIVILEGES;

现在一切都很好。以防万一,检查是否创建了新的root用户。

SELECT User,Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

退出mysql。 (按 CTRL + Z)。不使用 SUDO

连接到 MySQL
mysql -u root

希望这会有所帮助!

我已经使用以下命令解决了这个问题。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';
FLUSH PRIVILEGES;

在这里, username = 您喜欢的任何用户名。

password = 您喜欢的任何密码。

这个 需要稍微适应 mariaDB 而不是 mysql。

首先使用 sudo 以 root 身份登录:

$ sudo mysql -uroot

然后更改 mariadb root 用户:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('mypassword');
FLUSH PRIVILEGES;

从现在开始不再需要 sudo:

$ mysql -uroot -p

使用的版本: mysql Ver 15.1 Distrib 10.4.13-MariaDB,适用于 osx10.15 (x86_64) 使用 readline 5.1

使用 sudo 登录 mysql: sudo mysql -u root -p

之后删除当前的 root@localhost 帐户:

~ MariaDB [(none)]> DROP USER 'root'@'localhost';
~ MariaDB [(none)]> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
~ MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
~ MariaDB [(none)]> FLUSH PRIVILEGES;