[英]Connect to MySQL instance on Google Cloud Compute Engine VM from Cloud Run PHP
[英]PHP MySQL PDO Connection to Google Cloud SQL Instance from VM Instance not working
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>';
}
我似乎找不到有关如何正确设置连接的详细信息。 我遵循所有文档并激活了 VM IP、客户端 SQL API 和管理员 ZDB97344238714CA816 的权限。
任何帮助将不胜感激。
您没有运行 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;
问题不在于上面的代码,它一直有效,问题是经过许可的。
setsebool -P httpd_can_network_connect_db 1
瞧……这就是我找到答案的地方!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.