Roger: Sicherung per mysqldump schlägt fehl

hallo!

wenn ich mittels system() in einem php script ein mysql-dump erstellen möchte, habe ich das bisher so gemacht, dass ich alle tabellen habe auslesen lassen und diese dann mittels mysqldump + pipe an einen packer sende. zum schluss habe ich jede tabelle in einer eigenen gepackten datei. das macht das rücksichern sehr einfach.

  
 $result = MYSQL_QUERY("SHOW TABLES");  
 $numrow = MYSQL_NUM_ROWS($result);  
 for($i = 0;$i < $numrow;$i++) {  
   $table = MYSQL_RESULT($result,$i);  
   echo "$table ... ";  
   system(sprintf("mysqldump --opt -h ".$mysql['host']." -u ".$mysql['user']." --password=".$mysql['pasw']." ".$mysql['db']." $table | gzip > %s/$table.sql.gz",$path));  
   echo "DONE<br>\n";  
 }  

leider klappt es auf dem jetzigen server irgendwie nicht :(
ich bekomme nur die ollen header zu gesicht, der rest (struktur + daten) fehlt.

hier mal die headerdaten, die angezeigt werden, egal bei welcher tabelle, oder ob die tabelle überhaupt existiert:
--
-- Host: localhost    Database: usr_web10_2
-- ------------------------------------------------------
-- Server version 4.1.11-Debian_4sarge7-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

die ausgabe habe ich auch ohne die pipe zum debuggen erst mal auf den bildschirm ausgegeben. das obige daten angezeigt werden bedeutet doch zum einen, dass system() und zum anderen mysqldump funktionieren. wobei ich mir eben beim letzteren nicht sicher bin...
die übergebenen variablen ($mysql) sind auch die, die anderweitig in bestehenden scripten auf dem server eingesetzt werden.

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. hallo!

    system(sprintf("mysqldump --opt -h ".$mysql['host']." -u ".$mysql['user']." --password=".$mysql['pasw']." ".$mysql['db']." $table | gzip > %s/$table.sql.gz",$path));

    --opt steht für '--quick --add-drop-table --add-locks --extended-insert --lock-tables'. wenn der user keine berechtigung hat, die tabellen zu 'locken' (--lock-tables), dann klappt's auch nicht ;)
    also entweder alles so hinschreiben, wie es da oben steht, nur ohne --lock-tables oder dem user die berechtigung geben...

    gruß.
    roger.

    --
    meine freundin sagt, ich wäre neugierig.
    so steht's zumindest in ihrem tagebuch.