Sha*_*aun 8 php google-app-engine google-cloud-sql
我一直在尝试过去2天从appengine连接到cloudql,我能够通过IP从linux webserver连接,但是无法从具有相同设置的app引擎连接.
我的连接字符串如下:请注意实际的appid被替换以及dbname
在app.yaml
env_variables:
MYSQL_DSN: mysql:unix_socket=/cloudsql/appid:us-central1:sql-instance-1;dbname=dbname
MYSQL_USER: root
MYSQL_PASSWORD: ''
Run Code Online (Sandbox Code Playgroud)
在phpfile中
$dsn = getenv('MYSQL_DSN');
$user = getenv('MYSQL_USER');
$password = getenv('MYSQL_PASSWORD');
if (!isset($dsn, $user) || false === $password) {
throw new Exception('Set MYSQL_DSN, MYSQL_USER, and MYSQL_PASSWORD environment variables');
}
$conn = new PDO($dsn, $user, $password);
Run Code Online (Sandbox Code Playgroud)
以上内容来自https://cloud.google.com/appengine/docs/standard/php/cloud-sql/ 我尝试过使用密码,而不是使用密码.我尝试过用户名root,作为用户名,密码和用户名没有.
我正在使用第二代设置和flex php环境,我一直收到的错误如下:
短暂的错误
SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)
完全错误
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /app/dbconn.php:12 Stack trace: #0 /app/dbconn.php(12): PDO->__construct('mysql:unix_sock...', 'root', '') #1 /app/api.user.php(2): include_once('/app/dbconn.php') #2 {main} thrown in /app/dbconn.php on line 12
Run Code Online (Sandbox Code Playgroud)
我现在真的没有想法.请注意,sql和app都在同一个项目中.
如果您通过SSH登录实例(这将使其置于调试模式),则可以检查套接字文件是否存在。您可以从Cloud Console中打开连接。
然后,
ls /cloudsql
Run Code Online (Sandbox Code Playgroud)
该目录应<project-id>:<region>:<instance-name>在MYSQL_DSN环境变量之后包含一个名为的项目。
如果不存在,请确保已启用相关的API。在使用Cloud SQL的文档页面中,按照“开始之前”(特别是“启用API”)下的说明进行操作。(您的日志可能还会通知您:“未配置访问。之前尚未在项目中使用Cloud SQL管理API或将其禁用。”)启用API后,请等待几分钟,然后重新部署。
您可能已经做到了,但是根据我的经验,这是一个容易忽略的步骤。
另外,请确保您的app.yaml文件包含以下内容:
beta_settings:
cloud_sql_instances: "<project-id>:<region>:<instance-name>"
Run Code Online (Sandbox Code Playgroud)
最后,尝试将MYSQL_DSNapp.yaml文件中的值放在引号中。