PHP MySQL PDO从VM实例连接到Google Cloud SQL Instance不起作用



DSN是:mysql:dbname='MyDB';unix_socket='/cloudsql/ethereal-accord-123456789:us-central1:dev-Instance'

连接失败: SQLSTATE[HY000] [2002] 没有这样的文件或目录

PDO连接代码:

try {
$conn = new PDO($dsn, $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
return $conn;
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage().' <BR>';
}

我似乎找不到有关如何正确设置连接的详细信息。 我遵循所有文档并激活了虚拟机 IP、客户端 SQL API 和管理 API 的权限,但什么都没有。

任何帮助将不胜感激。

您没有运行 cloudsql 代理,或者您已经为套接字文件定义了另一个位置。您应该检查一下。

./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:3306 &
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=DATABASE_NAME';

https://cloud.google.com/sql/docs/mysql/connect-external-app#pdo-tcp

我使用这些行将我的代码恢复为 MYSqli 而不是 PDO

$host_name = "35.222.111.111";
$database = "myDB123";
$user_name = "dbuser123";
$password = "pass12345";
$GCSocket ="/cloudsql/ethereal-accord-2000000:us-central1:dev-instance-1"; $GCPort='3306';
$connect = mysqli_connect($host_name, $user_name,$password,$database,$GCPort,$GCSocket )
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error() ."<br>";
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL ."<br>";
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL  ."<br><br>";
} else {
echo 'DB is connected..! <BR>';
}
return $connect;

问题不在于上面的代码,它一直有效,问题在于许可。

  1. 我已将我的 IP 列入了云 SQL Server 中计算引擎虚拟机的白名单
  2. 授予计算引擎服务帐户访问云 SQL 的权限 Cloud SQL
    • Client 或 Cloud SQL Admin
  3. 在计算引擎 VM 中执行以下操作:
setsebool -P httpd_can_network_connect_db 1

瞧... 这是我找到答案的地方!

最新更新