Postgresql

如何讓 HeidiSQL 第一次連接到 Postgres 數據庫?

  • April 3, 2017

對於兩個不同的 Linux 伺服器,我沒有使用標準配置在它們上安裝 Postgres。他們在異地的不同網路中。

Postgres 服務正在執行(正如我通過執行檢查的那樣ps -ef | grep postgres)。我在兩台 Linux 伺服器上都安裝了 namp。

這些命令顯示埠 5432 未被阻止:

nmap -p 5432 x.x.x.x

我可以從我的 Windows 機器通過 SSH 連接到任一 Linux 伺服器。我的 Windows 桌面上有 Heidi SQL。當我嘗試使用 HeidiSQL(使用埠 5432)連接到這些伺服器中的任何一個時,我得到“無法連接到伺服器:連接被拒絕…是伺服器在主機“xxxx”上執行並接受埠 5432 上的 TCP/IP 連接。” 這以前從未奏效。

我應該怎麼做才能讓 HeidiSQL 連接到 Linux 伺服器上的 Postgres 數據庫?

首先,確保你可以從你的 Linux 機器本身連接到你的 PostgreSQL 數據庫(如果你有兩個,你將在兩台機器上都有所有東西)。

你這樣做使用psql

psql -h localhost -p 5432 postgres

這假設psql在您的路徑中;如果不是…查找它所在的位置取決於您的特定 Linux 版本、PostgreSQL 版本和安裝方法;請指定它們。

如果您無法從本地電腦連接到數據庫…確保它正在執行,並且它是實際使用 5432 埠的程序。


接下來,您需要檢查您的PostgreSQL 配置文件設置。要檢查的文件稱為postgresql.conf. 同樣,它的位置取決於您如何安裝它。檢查我的 postgres *.conf 文件在哪裡?.

在配置文件中,您需要檢查參數listen_addressesport,它們指示 PostgreSQL 應該連接到哪些 TCP-IP 地址和埠。您可能阻止了埠 5432,並且 PostgreSQL 正在偵聽它,但僅針對您的 127.0.0.1 (localhost) IP 地址,而不是偵聽“外部世界”。預設設置(AFAIK)是只收聽’localhost’。

如果你的 Linux 機器通過 192.168.1.2 埠與外界相連,並且你想使用標準的 5432 埠,你應該有:

listen_addresses = 'localhost, 192.168.1.2'
port = 5432

如果您更改任何這些參數,您應該停止並重新啟動 PostgreSQL 服務。

$$ There are alternatives that don’t need to stop, but at this point, I think this is the easiest way. $$


一旦你讓 PostgreSQL 監聽外部世界,你仍然需要允許來自使用者的連接。這是通過pg_hba.conf 文件完成的。您需要允許一些使用者使用特定的身份驗證方法從某個IP 地址(或某個範圍,或所有這些地址,…)連接到您的數據庫。最常見的設置如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# local net
host    all             all             192.168.1.0/24          md5

這意味著:所有使用者都可以使用地址為 192.168.1.0 .. 192.168.1.255 的 TCP/IP 主機連接到所有數據庫,使用md5 表示密碼)進行身份驗證。


如果您的 Linux 機器使用 SELinux/iptables,請確保它們允許連接。檢查,例如Linux:Iptables Allow PostgreSQL server incoming request,或遠端連接到 Postgres,在 iptables 中為 Postgres 打開埠 5432


如果您需要為 PostgreSQL 連接設置 SSL…檢查Secure TCP/IP Connections with SSL。我建議您僅在首先設法建立不安全(非 SSL)連接後才使用 SSL。


檢查 Windows 機器中的防火牆,和/或 Windows 和 Linux 機器之間的任何外部防火牆。如果它們中的任何一個存在並且處於活動狀態,請確保它們允許與埠 5432 進行通信。您的具體情況很大程度上取決於您的實際設置。資源:如何在 Windows 10 中打開防火牆埠


確保您可以ping在 Windows 中使用您的 Linux 機器。如果你telnet在你的 Windows 機器上,試著telnet (ip-of-your-linux-box) 5432檢查你是否可以連接(只要你輸入一些東西,你很可能會斷開連接,沒關係)。


此時,HeidiSQL 應該能夠連接到您的遠端 Linux 機器。(現在,重複第二個)。

引用自:https://dba.stackexchange.com/questions/168162