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

时间:2020-07-02 02:55:32

标签: mysql

我有一个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个小时里,我一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:0)

my.cnf文件将[mysqld](或server或其他一些选项)中的用户列为服务器启动系统的Unix用户。请勿更改。

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

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

在SQL上:

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

无需将其放在子查询中。一个简单的选择就可以了。另外,(user,host)组合是一个不同的用户。