请教大家一个问题
$cmd = "\"".$basedir."bin\mysqldump.exe\" --default-character-set=latin1 -uroot -ptest ".$this->sql_handle->database." > ".$doc_root."\\test\\test.sql";
$stat = -1;
system($cmd,&$stat);
这段代码在windows里可以正确的导出数据库没有用过linux,请教大家,在linux下应该怎么修改?

解决方案 »

  1.   

    --default-character-set=latin1 -u root -p test 参数名与参数需用空格格开
    ".$doc_root."\\test\\test.sql" 路径分隔符是/
      

  2.   

    这个是个很简单的脚本 你自己参考吧#!/bin/sh
    # File: /home/mysql/backup.sh
    # Database info
    DB_NAME="test"
    DB_USER="username"
    DB_PASS="password"# Others vars
    BIN_DIR="/usr/local/mysql/bin"
    BCK_DIR="/home/mysql/backup"
    DATE=`date %F`# TODO
    $BIN_DIR/mysqldump –opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/db_$DATE.gz
      

  3.   

    "/usr/local/bin/mysqldump.exe -u root -p albergo albergo > /usr/local/www/data/test/test.sql";
    我修后echo出来是上面的内容
    但是为什么还是执行失败....
    $stat = -1;
    system($cmd,&$stat);
      

  4.   

    linux 用exec
    exec("mysqldump -uroot -p database  table >  /www/..... /sql.sql ");
      

  5.   

    /usr/local/bin/mysqldump
    没有 .exe
      

  6.   

    感谢大家的热心帮助 
    现在我修改了一下 echo 出来是
    /usr/local/bin/mysqldump -uusername -ppwd dbname > /usr/local/www/data/test/test.sql然后我执行
    $stat = -1;
    system($cmd,&$stat);
    好像还是有错。。 按照2楼的说法 -u -p后面加空格也是一样不能备份
      

  7.   

    权限应该是够的
    我看了一下
    system($cmd,&$stat);
    执行完后 一直是返回的空  $stat的值一直是2
      

  8.   

    最好切换apache/nginx用户执行下那个mysqldump命令,确定不是权限问题。
      

  9.   

    string system ( string $command [, int &$return_var ] )
    第二个参数本身是引用传递,不需要你去添加&。
    我测试了一下,如果加上&,会报这个错误:
    Fatal error: Call-time pass-by-reference has been removed in /www/admin/test.php
    并且程序将不会执行。
    我的PHP版本是5.4.0。建议你修正试试  system($cmd, $stat);
      

  10.   


    执行我给你的代码没。还有文件是否有写权限
    $cmd = "mysqldump -uroot -ptest ".$this->sql_handle->database." > ".$doc_root."\\test\\test.sql";
    exec($cmd);
      

  11.   

    我这这样写可以
    $ds = 100;
    system("/usr/local/mysql/bin/mysqldump -u root work > /www/datas.sql", $ds);
    var_dump($ds);
    root用户无密码,work是数据库名
    var_dump($ds)输出 int(0)
      

  12.   


    我的输出是int(2);  不知道是哪儿有问题 我用的服务器是freebsd的 
      

  13.   


    exec也试过了, 也没有能导出.
    文件应该是有写权限的,因为我用ftp连过去看了,新建文件,修改,删除都可以
      

  14.   

    /usr/local/bin/mysqldump -uusername -ppwd dbname > /usr/local/www/data/test/test.sql
    确定有/usr/local/bin/mysqldump 这个文件,具体可用
    var_dump( system("ls /usr/local/bin") );看看有没有'mysqldump'
    修改/usr/local/www/data/test/权限到所有用户可写
    一直都是直接在本机终端下做这些,用php没做过所以只能给你这点建议
      

  15.   

    谢谢您的指点, 我把权限都开放成所有用户可写就可以了, 没有玩过linux, 一直是在windows上写C++, 权限这个东西真不懂...  也谢谢楼上的各位大侠热心帮忙.