我有一个 AWS EC2 实例。我在 ubuntu 服务器中安装了 mysql,现在我正在尝试连接到 ubuntu 服务器上已安装的数据库。
我一生都无法弄清楚为什么 mysql 不会在我绑定到配置文件的 IP 上启动。
我运行以下命令:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
几件事:
- 在这种情况下,我将绑定 IP 地址编辑到我的公共 ip:
54.62.33.334
而不是127.0.0.1
因为这是一个生产服务器。 - 我将
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)
组合是一个不同的用户。