2012-03-23 27 views
1

私はデータベースをバックアップ/復元するためにmysqlコマンドを実行するためにPHPを使用しています。ローカルホストでは、実行可能ファイルを特定する必要があったため、問題なく動作しました。しかし、サーバー上では動作しません。これは私がPHPコードとして使用していますものです:MySqlコマンドmysqldumpが実行されていませんか?

public function backup() { 
    $backup = $this->backups.'/'.$this->db_name.'_backup_'.date('Y').'_'.date('m').'_'.date('d').'.sql'; 
    $cmd = "mysqldump --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name > $backup"; 
    try { 
     system($cmd); 
     return $this->encode('Error',false,'Backup Successfuly Complete'); 
    } catch(PDOException $error) { 
     return $this->encode('Error',true,$error->getMessage()); 
    } 
} 

public function restore($backup) { 
    $cmd = "mysql --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name < $backup"; 
    try { 
     exec($cmd); 
     return $this->encode('Error',false,'Restore successfuly complete'); 
    } catch(PDOException $error) { 
     return $this->encode('Error',true,$error->getMessage()); 
    } 
} 

がある任意の変数を抽象化してください、私はコマンドは、サーバ上で動作していない理由を見つけるために探しています。

また、コマンドが実際に正しく実行されたかどうかをPHPで確認するにはどうすればよいですか? tryメソッドで私は常に肯定的な答えを得るので。

+0

サーバーに適切な書き込み権限がありますか? –

+0

$ cmdの値を表示し、サーバー上で手動で実行して、ここにエラーメッセージを報告してください。 – barsju

+0

@barsju - phpMyAdminの意味ですか?私はそこでそれを実行し、何が起こるかを見ようとします。 – Roland

答えて

2

「がある任意の変数の抽象化をしてください」 - とにかく私は、例えば、絶対パスなしのmysqldumpは、ウェブサーバのプロセスのコンテキストに記載されていない可能性がありますあなたがescapeshellarg()

を有効に利用することを願ってそれは単にその検索PATHにない(または全く存在しない)ためです。

エラーメッセージを取得するコマンドに2>&1を追加することで、STDERRをSTDOUTにリダイレクトすることができます。

+0

ああ、私はここに解決策を見つけた:http://serverfault.com/questions/109435/howto-mysqldump-cron-on-godaddy、それは私がパスワードを送った方法の問題だった、私はそれを引用符。 – Roland

関連する問題