Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有使用php通过EC2连接到RDS的文件或目录_Php_Amazon Web Services_Amazon Ec2_Aws Rds_Mysql.sock - Fatal编程技术网

没有使用php通过EC2连接到RDS的文件或目录

没有使用php通过EC2连接到RDS的文件或目录,php,amazon-web-services,amazon-ec2,aws-rds,mysql.sock,Php,Amazon Web Services,Amazon Ec2,Aws Rds,Mysql.sock,我已经在amazon web服务上设置了RDS和EC2。RDS位于一个安全组中,EC2位于另一个安全组中。EC2安全组接受来自任何位置的http、https和ssh流量(尽管我已尝试将其设置为所有流量),而RDS安全组接受来自自身和EC2安全组的所有入站流量 我在EC2上有一些php文件,带有 $server = $_SERVER['DB_SERVER']; $username = $_SERVER['DB_USERNAME']; $password = $_SERVER['DB_PASSWOR

我已经在amazon web服务上设置了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_服务器等列在/var/www/inc/dbinfo.inc中的dbinfo.inc中:

这会给出“没有这样的文件或目录”的响应,我被告知这是因为没有找到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 

两者都给出“没有这样的文件或目录”


感谢您的帮助

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

首先,不要按照amazon文档连接
rds
数据库。 原因
$\u服务器['anything']
返回空值。所以
$server=$\u server['DB\u 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;

?>

当我试图在
aws
ec2
并在rds上托管数据库

首先,不要按照amazon文档连接
rds
数据库。 原因
$\u服务器['anything']
返回空值。所以
$server=$\u server['DB\u 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;

?>


在调用
connect()
之前,打印
$server
和其他变量的值。我敢打赌它们是空的。在连接到RDS时,尝试使用类似
mysql.sock
的套接字文件是完全无效的,因此您的问题不是缺少该文件。问题是您的系统正在尝试查找它——它不是必需的,您的配置不应该检查它的存在,也不应该抛出该错误。。。但是如果默认情况下,
$server
没有实际设置,它可能会尝试这样做……而且由于示例代码没有显示必要的
,可能是
dbinfo.inc
文件没有实际加载,因此值很可能没有定义……很高兴知道我不需要套接字文件!我在php文件中添加了include“./inc/dbinfo.inc”,并使其回显$server等,但无论有没有include,它都不会在显示500内部服务器错误之前回显任何内容。。。这就是进步。如果
$server
是空的,那么肯定是PHP问题,这里不是RDS问题。不是$server是空的,很可能是空的,但无论如何我都看不到它的内容。在控制台上出现500内部服务器错误并消失之前,我无法回显固定字符串。请在调用
connect()
之前打印
$server
的值和其他变量。我敢打赌它们是空的。在连接到RDS时,尝试使用类似
mysql.sock
的套接字文件是完全无效的,因此您的问题不是缺少该文件。问题是您的系统正在尝试查找它——它不是必需的,您的配置不应该检查它的存在,也不应该抛出该错误。。。但是如果默认情况下,
$server
没有实际设置,它可能会尝试这样做……而且由于示例代码没有显示必要的
,可能是
dbinfo.inc
文件没有实际加载,因此值很可能没有定义……很高兴知道我不需要套接字文件!我在php文件中添加了include“./inc/dbinfo.inc”,并使其回显$server等,但无论有没有include,它都不会在显示500内部服务器错误之前回显任何内容。。。这就是进步。如果
$server
是空的,那么肯定是PHP问题,这里不是RDS问题。不是$server是空的,很可能是空的,但无论如何我都看不到它的内容。在控制台上出现500内部服务器错误并随后消失之前,我无法回显固定字符串。