sql >> Databáze >  >> RDS >> Mysql

Spuštění mysqldump z PHP skriptu nefunguje, ale funguje na SSH

Vzdělaný odhad

Pokud mohu kvalifikovaně odhadnout, je to proto, že uživatel, který spouští php-script (tj. uživatel, pod kterým je spuštěn httpd), nemá oprávnění zapisovat do /var/www/vhosts/mydomain.com/httpdocs/tools/ .

Ačkoli uživatel, kterého používáte k provedení příkazu, ano.

STDERR a STDOUT

Chcete-li zjistit, zda je něco vytištěno na STDERR který je pro daný problém relevantní, použijte níže uvedený úryvek!

$tubes = array(
  0 => array("pipe", "r"),
  // print contents on STDOUT to file
  1 => array("file", "/var/www/vhosts/mydomain.com/httpdocs/tools/dbbackup-2011-12-17.sql", "w"),
  2 => array("pipe", "w")
);

$p_handle = proc_open (
  "/usr/bin/mysqldump --opt --host=localhost --user=\"myuser\" --password=\"mypass\" db_name",
  $tubes, $pipes
);

if (is_resource ($p_handle)) {
    fclose ($pipes[0]);

    $stderr_data = stream_get_contents ($pipes[2]); fclose($pipes[2]);

    $proc_ret    = proc_close ($p_handle);

    echo "--------- STDERR:\n$stderr_data\n";
    echo "------------ RET: $proc_ret\n";
} else {
  die ("Unable to execute external resource, aborting!");
}

Zkontrolujte soubory protokolu!

Zkontrolovali jste error_log spojené s vaším httpd ?




  1. Schéma SQL serveru a výchozí schéma

  2. Nejlevnější způsob, jak zjistit, zda je připojení MySQL stále živé

  3. Spojte dvě tabulky a filtrujte je pomocí klauzule where

  4. Jak nahrávat a stahovat soubory PHP a MySQL