AWS:Command在命令行中运行,但不在PHP的exec中运行

时间:2014-01-22 23:40:47

标签: php mysql permissions exec mysqldump

我正在尝试允许一个简单的PHP表单来创建数据库的备份。根据我迄今为止的研究,最好的方法是使用PHP的exec函数。当我运行我的PHP脚本时,它在用户apache下运行,exec函数的第二个和第三个参数分别返回并清空数组和1

当我登录我的AWS EC2实例并复制/粘贴命令时,它被传递给exec函数,它执行得很好!我能说的唯一区别是我以用户ec2-user而不是apache登录。我开始讨论/etc/sudoers文件,但所有这一切都打破了我的svn-post-commit-hook-update-project脚本(我通过以下this tutorial创建)。

作为参考,以下是我使用PHP和exec函数进行的两次数据库复制尝试:

// method 1
$command = "/usr/bin/sudo /usr/bin/mysqldump -u ".getDBUsername()." $password ".getDBDatabase()." | mysql -u ".getDBUsername()." $password $new_db";
$output = array();
$return = null;
$output = exec($command, $output, $return);
var_dump($output);

我做的第二次尝试是将mysqldump传递给.sql文件,然后将其读回来,但.sql文件永远不会被填充(虽然它会被创建)。

// method 2
$dump_command = "sudo mysqldump -u ".getDBUsername()." $password".getDBDatabase()." > ./temp.sql";
$output = null;
$return_var = null;
exec($dump_command, $output, $return_var);
var_dump($output);
exec("sudo mysql $new_db -u ".getDBUsername()." -p".getDBPassword()." < ./temp.sql");

注意:

    如果设置了密码,
  1. $password确实包含-p标记(是的,它与密码之间没有空格)。
  2. 我尝试使用chown命令将创建文件的目录(或包含这些exec命令之一的.php脚本)提供给apache,但它没有什么区别。
  3. 有关尝试什么的任何建议?我怀疑只是向用户apache提供了ec2-user已经足够的权限,但还没有想出如何做到这一点,而且我对/etc/sudoers的编辑只是破坏了目前为止的事情

1 个答案:

答案 0 :(得分:0)

在别处得到这个答案并为我工作:

  

首先,你不需要sudo来运行mysqldump。我认为那是   在这里没有工作的东西 - 它提示输入密码和   失败。删除它,如果其他所有,这应该工作正常   设置得当。