php 计算引擎不连接到Cloud SQL,但从本地工作站和App Engine工作

ep6jt1vc  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(104)

我在Cloud SQL有一个MySQL数据库。我用App Engine和PHP很好。我可以从本地Apache服务器连接到它,PHP也很好。
当在我的计算引擎示例上尝试相同的脚本时,它不起作用:“SQLSTATE[HY 000] [2002] No such file or directory”

  • 我已经在Cloud SQL允许的连接设置中输入了计算引擎IP。
  • 我已将SQL用户设置为“xxx@%”
  • 计算引擎是Debian 9
  • SELinux未运行

下面是我的连接代码:

// MySQL Settings:
    $dbuser='xxx';
    $dbpassword='yyy';
    $dbname='zzz';
    $dbconnection = "aaaa:us-central1:aaaa-sql";
    $_SESSION['db_source'] = 'mysql:unix_socket=/cloudsql/'.$dbconnection.';dbname='.$dbname;

try {
    $db = new PDO($_SESSION['db_source'], $dbuser, $dbpassword);
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $db->setAttribute( PDO::ATTR_EMULATE_PREPARES, TRUE );
} catch (PDOException $e) {
    $error_message = $e->getMessage();
    include('errors/db_error.php');
    exit;
}

字符串
为什么这在App Engine和Locally上有效,但在Compute Engine上无效?是否需要安装或运行某些内容?

qij5mzcb

qij5mzcb1#

你的问题在这里:

$dbconnection = "aaaa:us-central1:aaaa-sql";
$_SESSION['db_source'] = 'mysql:unix_socket=/cloudsql/'.$dbconnection.';dbname='.$dbname;

字符串
有两种方法可以从Compute Engine上运行的软件连接到Cloud SQL。
第一种方法是在连接字符串中指定Cloud SQL IP address。这也意味着您必须将计算引擎IP地址配置为authorized network

$cloud_sql_ip_addr = 'REPLACE_ME';
$dsn = 'mysql:dbname=' . $dbname . ';host=' . $cloud_sql_ip_addr;
$db = new PDO($dsn, $dbuser, $dbpassword);


第二种方法是安装和配置Google Cloud SQL Auth Proxy

$cloud_sql_ip_addr = '127.0.0.1';
$dsn = 'mysql:dbname=' . $dbname . ';host=' . $cloud_sql_ip_addr;
$db = new PDO($dsn, $dbuser, $dbpassword);

相关问题