我已经在应用服务器上安装了 mysql mysql Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
。我的 VPS 上的操作系统是Ubuntu 20.04.1 LTS
。
为了管理这个数据库,我通过 SSH 本地连接到服务器,然后访问数据库。
但是,诸如 google data studio 之类的服务需要 jdbc url 或数据库主机名。
我尝试使用我的服务器 IP 作为主机名,然后使用正确的端口、用户名和密码。但是,我得到:
我认为我的主机名是错误的,因为它位于服务器本地localhost
,而不是服务器的 IP。
关于如何连接数据库或找到正确主机名有什么建议吗?
感谢您的回复!
更新
运行ss -nlp
我得到:
root@myVPS:~# sudo ss -nlp | grep mysql
u_str LISTEN 0 70 /var/run/mysqld/mysqlx.sock 190906736 * 0 users:(("mysqld",pid=1668517,fd=33))
u_str LISTEN 0 151 /var/run/mysqld/mysqld.sock 190906739 * 0 users:(("mysqld",pid=1668517,fd=36))
u_dgr UNCONN 0 0 * 190906575 * 12685 users:(("mysqld",pid=1668517,fd=3))
tcp LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* users:(("mysqld",pid=1668517,fd=32))
tcp LISTEN 0 151 *:3306 *:* users:(("mysqld",pid=1668517,fd=34))
答案1
(Ubuntu 上的 Mysql?我以为它已经在 repos 中被 Mariadb 取代了)。
您会注意到系统要求您输入用户名和密码。您在 MySQL 中创建了用户名和密码吗?您是否创建了要使用的数据库?这看起来像是一个先有鸡还是先有蛋的问题(确实如此)。您应该首先创建一个数据库和一个访问该数据库的用户。
我相信 MySQL 的默认版本当前使用 so_peer 身份验证,因此您可以使用 mysql cli 工具以 root 身份连接而无需密码:
user@host ~$ sudo mysql
...
mysql > CREATE USER `testuser`@`localhost` IDENTIFIED BY 's3cr3t';
mysql > CREATE USER `testuser`@`%` IDENTIFIED BY 's3cr3t';
mysql > CREATE DATABASE example1;
mysql > GRANT ALL ON example1.* TO `testuser`@`localhost`;
mysql > GRANT ALL ON example1.* TO `testuser`@`%`;
mysql > FLUSH PRIVILEGES;
mysql > quit
在上述上下文中,“%”表示任何 IP 地址。MySQL 为“localhost”赋予了特殊含义。它不描述环回网络接口 - 它表示访问是通过文件系统套接字进行的。这可能会造成很多混乱。
通常,MySQL 配置为监听文件系统套接字,有时监听环回接口。您可以使用以下命令检查这一点(以及 mysql 服务是否正在运行......
user@host ~$ sudo ss-nlp | grep mysql
u_str LISTEN 0 128 /var/run/mysqld/mysqld.sock 842576 * 0 users:(("mysqld",pid=16463,fd=20))
tcp LISTEN 0 128 127.0.0.1:3306 *:*
在这里我可以看到服务器正在使用 /var/run/mysqld/mysqld.sock 上的文件系统套接字和环回接口上的端口 3306。
您上面显示的对话框显然不适用于文件系统套接字 - 因此您需要使用环回接口。为了连接到网络套接字,您必须告诉 mysql 客户端主机位于“127.0.0.1”,而不是 localhost。