【发布时间】:2017-03-19 21:50:44
【问题描述】:
我在亚马逊网络服务上设置了 RDS 和 EC2。 RDS 在一个安全组中,而 EC2 在另一个安全组中。 EC2 安全组接受来自任何位置的 http、https 和 ssh 流量(尽管我尝试将其设置为所有流量),而 RDS 安全组接受来自其自身和 EC2 安全组的所有入站流量。
我在 EC2 上有一些 php 文件,带有
$server = $_SERVER['DB_SERVER'];
$username = $_SERVER['DB_USERNAME'];
$password = $_SERVER['DB_PASSWORD'];
$database = $_SERVER['DB_DATABASE'];
$connection = new mysqli($server, $username, $password, $database);
echo $connection->connect_error;
其中 DB_SERVER 等列在 /var/www/inc/dbinfo.inc 中的 dbinfo.inc 中,根据本教程:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html
这给出了“没有这样的文件或目录”的响应,我被告知这是因为找不到 mysql.sock 文件。
在 /etc/my.cnf 我有:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
*bunch of comments*
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
但/var/lib/mysql(或/var/lib/mysql/mysql)中不存在mysql.sock
跑步
find . mysql.sock
和
find . mysqld.sock
都给出“没有这样的文件或目录”
感谢您的帮助
【问题讨论】:
-
在调用
connect()之前打印$server和其他变量的值。我敢打赌他们是空的。连接RDS时尝试使用mysql.sock之类的socket文件是完全无效的,所以你的问题是不是文件丢失了。问题是你的系统正在尝试寻找它——它不是必需的,你的配置不应该检查它的存在,也不应该抛出那个错误......但如果@987654329它可能会默认尝试@ 实际上没有设置。 -
...由于您的示例代码没有显示必要的
<?php include "../inc/dbinfo.inc"; ?>,可能是dbinfo.inc文件实际上没有被加载,因此这些值很可能是未定义的。 .. -
很高兴知道我不需要套接字文件!我将 include "../inc/dbinfo.inc" 添加到 php 文件中,并使其回显 $server 等,但无论有无包含,它在显示 500 内部服务器错误之前都不会回显任何内容。跨度>
-
嗯……这就是进步。如果
$server为空,那么您肯定有 PHP 问题,这里不是 RDS 问题。 -
$server 不是空的,也可能是空的,但无论如何我都看不到它的内容。在控制台上出现 500 内部服务器错误然后消失之前,我无法回显固定字符串。
标签: php amazon-web-services amazon-ec2 aws-rds mysql.sock