簡體   English   中英

在 perl 中從 GCE 遠程連接到 Google Cloud SQL 時出錯

[英]Errors connecting remotely to Google cloud SQL from GCE in perl

在 Debian Buster DBD:mysql 4.0502 上使用 Perl。

my $dbh = DBI->connect_cached(
  'DBI:mysql:<db>:<host>;mysql_ssl=1;mysql_ssl_ca_file=/etc/ssl/mysql/server-ca.pem;mysql_ssl_client_cert=/etc/ssl/mysql/client-cert.pem;mysql_ssl_client_key=/etc/ssl/mysql/client-key.pem', 
  <username>, <pass>);

嘗試通過 SSL 連接到 Google Cloud SQL (Mysql) 實例,但我反復收到錯誤: SSL connection error: Error while reading file. SSL connection error: Error in the certificate.

我在目錄上運行chown以將所有權移動到 mysql:mysql,嘗試了各種所有權配置,甚至移動了目錄。

我已經使用與腳本中相同的參數通過 CLI 進行連接,通過來自主機的不安全 SSL 上的腳本進行連接,但是一旦我僅通過 SSL 限制連接並使用這些命令,就會出現相同的錯誤。

更新:在對此進行了更多研究之后,我認為問題在於 Google 如何為其客戶端密鑰和證書( Cloud SQL 上的證書驗證)簽署主機名。 這里的建議不適用於 Perl 的 DBD::mysql,因為他們決定在使用 SSL ( https://github.com/perl5-dbi/DBD-mysql/issues/110 ) 時強制執行主機名驗證。

我仍在尋找解決此問題的方法,但我現在正在研究未來的私有 IP 和 VPC。

在撰寫本文時,Perl 不是與 Google Cloud Platform 交互的受支持語言。 即使您成功實現了一個 perl 腳本來連接到 Cloud SQL 實例,鑒於它的臨時性質,該解決方案也有可能有一天會停止工作。 確實實現並積極維護了多個其他語言的客戶端庫。 如果您想以編程方式與 GCP 服務交互,我強烈建議您切換到這些庫之一。 此外,如果支持團隊或通過 Github 問題給您帶來任何不便,您將獲得直接幫助。

話雖如此,一種可能的解決方法可能是從 perl 腳本調用 mysql 客戶端,就像在 linux shell 中所做的那樣。 這個想法是將您的 sql 語句寫入文件並運行 mysql 命令行工具來提供語句文件。 這種方法有明顯的警告,如果您需要交互式會話,它根本不起作用,但可以完成從 perl 腳本觸發簡單任務的工作。 我正在分享我制作的一個小片段。

-- sql statements file
show databases;
#!/usr/bin/perl
$data = `mysql --user=root --password=XXX  --host=XXX.XXX.XXX.XXX < file.sql`;
print("$data");

請記住,從安全的角度來看,以這種方式公開密碼是一個糟糕的主意。 而且,這種方法需要在你的SQL實例的連接選項卡白名單的GCE外部IP如圖所示這里


編輯:可以在此處找到連接到 Cloud SQL 的受支持庫的列表,幾乎所有這些庫都需要使用cloud_sql_proxy ,在同一個文檔(向上滾動)中解釋了它的配置。

另外,還有一些庫可以讓您像使用 gcloud 命令行工具一樣管理您的實例,可在此處找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM