没有这样的文件或目录通过EC2与PHP连接到RDS

时间:2016-11-06 14:00:25

标签: php amazon-web-services amazon-ec2 aws-rds mysql.sock

我已在亚马逊网络服务上设置了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 

都提供"没有这样的文件或目录"

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试在php aws上部署ec2应用程序时遇到了相同的问题 并在rds

上托管数据库

首先,请勿遵循Amazon文档来连接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;

?>