【问题标题】:No such file or directory connecting to RDS through EC2 with php没有这样的文件或目录通过 EC2 与 php 连接到 RDS
【发布时间】: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


【解决方案1】:

我在尝试在 aws ec2 上部署 php 应用程序时遇到了同样的问题 并在rds 上托管数据库

首先,不要按照亚马逊文档连接rds数据库。 原因$_server['anything'] 返回空值。所以
这里的$server = $_SERVER['DB_SERVER']; $server 只包含一个空值

改用以下代码:

<?php
$dbhost = 'your rds instance endpoint';
$dbport = 'port numberdefault 3306 ';
$dbname = 'name of data base';
$charset = 'utf8' ;
$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset=   {$charset}";
$username = 'username ';
$password = 'password';

try {

$pdo = new PDO($dsn, $username, $password);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "your sql query";

$pdo->exec($sql);
echo "successfully connected"; 
}
catch(PDOException $e)
{
t;    
echo "Connection failed: <br>  ". $e->getMessage(); 

}

$conn = null;

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2020-09-12
    • 1970-01-01
    • 2018-09-30
    • 2011-04-27
    相关资源
    最近更新 更多