我正在尝试允许一个简单的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");
注意:
$password
确实包含-p
标记(是的,它与密码之间没有空格)。chown
命令将创建文件的目录(或包含这些exec命令之一的.php脚本)提供给apache,但它没有什么区别。有关尝试什么的任何建议?我怀疑只是向用户apache
提供了ec2-user
已经足够的权限,但还没有想出如何做到这一点,而且我对/etc/sudoers
的编辑只是破坏了目前为止的事情
答案 0 :(得分:0)
在别处得到这个答案并为我工作:
首先,你不需要sudo来运行mysqldump。我认为那是 在这里没有工作的东西 - 它提示输入密码和 失败。删除它,如果其他所有,这应该工作正常 设置得当。