MYSQL 如何将配置 ip 绑定到用户表中的公共 ip?



我有一个 AWS EC2 实例。我在 ubuntu 服务器中安装了 mysql,现在我正在尝试连接到 ubuntu 服务器上已安装的数据库。

我一生都无法弄清楚为什么 mysql 不会在我绑定到配置文件的 IP 上启动。

我运行以下命令:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

几件事:

  1. 在这种情况下,我将绑定 IP 地址编辑到我的公共 ip:54.62.33.334而不是127.0.0.1因为这是一个生产服务器。
  2. 我将mysql的默认用户替换为我创建的用户jason
  • 我打开了入站网络端口到 3306。

我创建了一个名为"jason"的用户,并使用以下命令授予他访问所有数据库的权限:

GRANT ALL PRIVILEGES ON 'jason'@'54.62.33.334';

当我使用sudo systemctl restart mysql重新启动MySQL服务器时,它会抛出此错误:

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

我运行以下命令以查看错误。

journalctl -xe

它给了我这个。

Jul 02 02:51:53 ip-54.62.33.334 mysql-systemd-start[6378]: ERROR: Unable to start MySQL server: Jul 02 02:51:53 ip-54.62.33.334 mysql-systemd-start[6378]: 2020-07-02T02:51:53.747898Z 0 [ERROR] Fatal error: Can't change to run as user 'jason' ; Please check that the user exists! Jul 02 02:51:53 ip-54.62.33.334 mysql-systemd-start[6378]: 2020-07-02T02:51:53.748587Z 0 [ERROR] Aborting Jul 02 02:51:53 ip-54.62.33.334 mysql-systemd-start[6378]: Please take a look at https://wiki.debian.org/Teams/MySQL/FAQ for tips on fixing common upgrade issues. Jul 02 02:51:53 ip-54.62.33.334 mysql-systemd-start[6378]: Once the problem is resolved, restart the service. Jul 02 02:51:53 ip-54.62.33.334 systemd[1]: mysql.service: Control process exited, code=exited status=1 Jul 02 02:51:53 ip-54.62.33.334 systemd[1]: mysql.service: Failed with result 'exit-code'. Jul 02 02:51:53 ip-54.62.33.334 systemd[1]: Failed to start MySQL Community Server. -- Subject: Unit mysql.service has failed -- Defined-By: systemd

但是我确实有一个用户叫jason我运行以下命令来检查用户是否存在于我的用户表中,并且它返回 1,这是真的,所以我不确定我做错了什么。

SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username');

仅供参考:我可以使用root很好地连接到数据库,但我想使用用户jason进行连接,但由于某种原因我不能。

任何建议我将不胜感激。在过去的 4-5 个小时里,我一直在试图解决这个问题。

my.cnf 文件将[mysqld]中的用户(或server或其他几个选项(列为服务器启动系统的 unix 用户。不要更改此设置。

您可以在配置文件的[client][mysql]部分中设置user=jason,该配置文件将引用数据库用户jason。这需要位于连接到服务器的应用程序使用的配置中。

相反,感谢绑定到公有 IP 地址,您应该考虑使用 ssh 隧道来管理公有数据库实例。

在 SQL 上:

SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username');

没有必要把它放在子查询中。一个简单的选择就可以了。此外,(user,host)组合是一个不同的用户。

最新更新