从云 运行 PHP 连接到 Google Cloud Compute Engine VM 上的 MySQL 实例
Connect to MySQL instance on Google Cloud Compute Engine VM from Cloud Run PHP
我正在努力从 Google 云 运行 容器中托管的基于 PHP 的网站连接到 Google 上的 MySQL 数据库云计算引擎虚拟机。
最近,我在 Google 云 运行 环境中的容器内成功地建立了一个基于 PHP 的网站。我还设置了一个 Cloud SQL 实例,并且可以轻松地从 PHP 网站连接到 Cloud SQL 实例。
我发现云 SQL 服务比我计划的要贵很多,所以在 Compute Engine VM 上设置了 MySQL 运行 的实例。
MySQL 实例是 运行,我可以通过 VM 实例上的 SSH 访问数据库。配置文件为:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0
我正在使用 0.0.0.0 的绑定地址来允许来自我的开发机器的连接,因为使用更新的配置字符串构建容器相当乏味。
我用来连接云 SQL 实例的连接字符串是:
define('HOSTSPEC', NULL);
define('USERNAME', '<username>');
define('PASSWORD', '<password>');
define('DATABASE_INSTANCE_NAME', NULL); // Or the name of a database instance within your Cloud SQL instance.
define('PORT', NULL);
define('SOCKET', '/cloudsql/<project-name>:<instance-region>:<instance-name>');
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli(HOSTSPEC, USERNAME, PASSWORD, DATABASE_INSTANCE_NAME, PORT, SOCKET);
...
我找不到任何资源来建议托管在 Compute Engine VM 中的 MySQL 的连接字符串应该是什么!
我确实尝试了我用于我的开发机器的连接字符串,将本地主机的 IP 地址替换为 VM 的外部 IP 地址,但无济于事:
$server = 'XXX.XXX.XXX.XXX';
$username = '<username>';
$password = '<password>';
$database = '<database>';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli($server, $username, $password, $database);
...
我监控了 /var/log/mysql/error.log
,但没有看到任何连接失败,这表明我没有连接到服务器。
到目前为止,我已经浏览了以下链接,但还没有找到我正在寻找的答案:
Remote connections mysql ubuntu find address failed
Set-up MySQL (note: I was unable to complete these steps as I couldn't install MySQL as outlined, so I followed MySQL package MySQL server has no installation candidate
我无法执行以下 gcloud 命令:
gcloud config set project <project-name>
当我收到错误时:You do not appear to have access to project [<project name>] or it does not exist.
虽然这个项目确实存在并且我可以在云 运行 环境中访问它(并成功执行该命令)我的 PHP-基于网站托管。
对下一步尝试有什么建议吗?
当然,我可以放弃并在 VM 中构建基于 PHP 的网站,然后访问 MySQL 数据库 'locally',但已经弄清楚如何部署云中容器中的服务 运行,我想将网站保留在那里。
按照@alan 的建议,我尝试从我的开发机器上的终端连接到 MySQL 实例。
这表明虚拟机上的端口 3306 未打开。
我按照 this link 中的说明在 VM 上打开了端口 3306。
然后,我收到了ERROR 1130 (HY000): Host '<development machine IP address>' is not allowed to connect to this MySQL server
。
然后我将我的开发机器 IP 地址添加到 CREATE USER 和 GRANT USER 语句中,例如:
CREATE USER IF NOT EXISTS '<username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
CREATE USER IF NOT EXISTS '<username>'@'XXX.XXX.XXX.XXX' IDENTIFIED WITH mysql_native_password BY '<password>';
GRANT SELECT, INSERT, UPDATE ON <database>.<table> TO '<username>'@'localhost';
GRANT SELECT, INSERT, UPDATE ON <database>.<table> TO '<username>'@'XXX.XXX.XXX.XXX';
从云 运行 服务连接到 VM 的连接字符串是:
$server = 'XXX.XXX.XXX.XXX';
$username = '<username>';
$password = '<password>';
$database = '<database>';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli($server, $username, $password, $database);
...
我起床了 运行!
我正在努力从 Google 云 运行 容器中托管的基于 PHP 的网站连接到 Google 上的 MySQL 数据库云计算引擎虚拟机。
最近,我在 Google 云 运行 环境中的容器内成功地建立了一个基于 PHP 的网站。我还设置了一个 Cloud SQL 实例,并且可以轻松地从 PHP 网站连接到 Cloud SQL 实例。
我发现云 SQL 服务比我计划的要贵很多,所以在 Compute Engine VM 上设置了 MySQL 运行 的实例。
MySQL 实例是 运行,我可以通过 VM 实例上的 SSH 访问数据库。配置文件为:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0
我正在使用 0.0.0.0 的绑定地址来允许来自我的开发机器的连接,因为使用更新的配置字符串构建容器相当乏味。
我用来连接云 SQL 实例的连接字符串是:
define('HOSTSPEC', NULL);
define('USERNAME', '<username>');
define('PASSWORD', '<password>');
define('DATABASE_INSTANCE_NAME', NULL); // Or the name of a database instance within your Cloud SQL instance.
define('PORT', NULL);
define('SOCKET', '/cloudsql/<project-name>:<instance-region>:<instance-name>');
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli(HOSTSPEC, USERNAME, PASSWORD, DATABASE_INSTANCE_NAME, PORT, SOCKET);
...
我找不到任何资源来建议托管在 Compute Engine VM 中的 MySQL 的连接字符串应该是什么!
我确实尝试了我用于我的开发机器的连接字符串,将本地主机的 IP 地址替换为 VM 的外部 IP 地址,但无济于事:
$server = 'XXX.XXX.XXX.XXX';
$username = '<username>';
$password = '<password>';
$database = '<database>';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli($server, $username, $password, $database);
...
我监控了 /var/log/mysql/error.log
,但没有看到任何连接失败,这表明我没有连接到服务器。
到目前为止,我已经浏览了以下链接,但还没有找到我正在寻找的答案:
Remote connections mysql ubuntu find address failed
Set-up MySQL (note: I was unable to complete these steps as I couldn't install MySQL as outlined, so I followed MySQL package MySQL server has no installation candidate
我无法执行以下 gcloud 命令:
gcloud config set project <project-name>
当我收到错误时:You do not appear to have access to project [<project name>] or it does not exist.
虽然这个项目确实存在并且我可以在云 运行 环境中访问它(并成功执行该命令)我的 PHP-基于网站托管。
对下一步尝试有什么建议吗?
当然,我可以放弃并在 VM 中构建基于 PHP 的网站,然后访问 MySQL 数据库 'locally',但已经弄清楚如何部署云中容器中的服务 运行,我想将网站保留在那里。
按照@alan 的建议,我尝试从我的开发机器上的终端连接到 MySQL 实例。
这表明虚拟机上的端口 3306 未打开。
我按照 this link 中的说明在 VM 上打开了端口 3306。
然后,我收到了ERROR 1130 (HY000): Host '<development machine IP address>' is not allowed to connect to this MySQL server
。
然后我将我的开发机器 IP 地址添加到 CREATE USER 和 GRANT USER 语句中,例如:
CREATE USER IF NOT EXISTS '<username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
CREATE USER IF NOT EXISTS '<username>'@'XXX.XXX.XXX.XXX' IDENTIFIED WITH mysql_native_password BY '<password>';
GRANT SELECT, INSERT, UPDATE ON <database>.<table> TO '<username>'@'localhost';
GRANT SELECT, INSERT, UPDATE ON <database>.<table> TO '<username>'@'XXX.XXX.XXX.XXX';
从云 运行 服务连接到 VM 的连接字符串是:
$server = 'XXX.XXX.XXX.XXX';
$username = '<username>';
$password = '<password>';
$database = '<database>';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli($server, $username, $password, $database);
...
我起床了 运行!