我試圖讓一個簡單的PHP表單創建數據庫的備份。根據我迄今爲止的研究,最好的方法是使用PHP的exec函數。當我運行我的PHP腳本時,它在用戶apache
下運行,並且exec函數的第二個和第三個參數分別返回並且空數組和1
。AWS:命令在命令行中工作,但不是PHP的可執行文件
當我登錄到我的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
迄今爲止只是破碎的東西。