2014-03-12 231 views
1

我已經建立了其完美的功能但是我在使用連接麻煩谷歌Cloud SQL的任何文檔中給出的方法:連接到谷歌雲SQL

PDO

$db = new PDO('mysql:unix_socket=/cloudsql/hello-php:my-cloudsql-instance;charset=utf8','<username>','<password>'); 

的mysql_connect

$conn = mysql_connect(':/cloudsql/hello-php:my-cloudsql-instance', '<username>', '<password>'); 

的mysqli

$sql = new mysqli(null, '<username>', '<password>', null, null, '/cloudsql/hello-php:my-cloudsql-instance'); 

我可以從MySQL工作臺遠程連接,但每當我從網站上使用上述功能嘗試時,我都會得到一個「讀取初始通信數據包時丟失與MySQL服務器的連接'」 - 但我通過授權網絡授予了Cloud SQL訪問權限,檢查了給定的IP。我相信這與我並未嘗試從Google App Engine進行連接,而是從自己的開發數據庫進行連接有關。我如何從Google之外進行連接!?

更新:我已驗證我的IP每一種方式,但此代碼仍然無法正常工作。

$host="173.xxx.xx.xxx" <-- given from Google Developers COnsole 
$db_username="root"; 
$db_pasword="xxxx"; <-- password I set after creating the instance 

mysql_connect("$host", "$db_username", "$db_password")or die("cannot connect"); 

在該頁面提供了錯誤:

警告:mysql_connect()函數[function.mysql-連接]:在/ 111:在 '讀初始通信分組',系統錯誤而丟失連接到MySQL服務器。 ... /第5行 connect.php無法連接

當我嘗試這個PDO連接我也得到一個錯誤:

$dsn = 'mysql:host=173.xxx.xx.xxx;dbname=database_name'; 
$username = 'root'; 
$password = 'xxxx'; 

$dbh = new PDO($dsn, $username, $password); 

未捕獲的異常「PDO SQLSTATE [HY000] [2003]無法連接到MySQL服務器'173.xxx.xx.xxx'(111)'

回答

2

您無法使用unix套接字進行遠程連接只在本地計算機上),則需要通過網絡進行連接。

谷歌有一個brief description你需要做的事情,但基本上歸結爲你需要授權你想連接的IP號碼/範圍,並使用公共IP地址連接到數據庫該實例。

+0

感謝您的快速回復。這是我最初嘗試的,但仍然給我同樣的錯誤。主機:實例-IP,用戶:root,密碼我設置。如果我提交了該網站的公開IP,那麼爲什麼會出現這種錯誤? – user2727128

+0

很奇怪,如果你打開網絡連接你的IP,它應該是正常的。你能顯示你正在使用的PDO連接字符串嗎? (請混淆IP和密碼,我只想看到一般結構) –

+0

您的編輯確實聽起來像是防火牆問題。你確定你打開你的IP範圍來訪問數據庫嗎? (即第1步在答案中的鏈接) –