Mysql

連接到已安裝的 mysql 數據庫

  • December 28, 2021

我已經在我的應用程序伺服器上安裝了 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))                                           

(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。

引用自:https://serverfault.com/questions/1088329