2014-03-12 179 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步在答案中的链接) –