我想用mysqldump备份表的最后记录

时间:2015-09-21 04:52:50

标签: php mysql mysqldump

到目前为止,我有这个:

exec('mysqldump --user=$DBUSER --password=$DBPASSWD --host= localhost DB_NAME (select column from database.table where= column > 1234) > table.sql');

当我使用浏览器在服务器上打开文件时,没有任何反应。 现在,下一个代码确实输出了一个SQL文件但是空文件:

set_time_limit(600);
system("mysqldump -h localhost -u $DBUSER -p $DBPASSWD $DATABASE  > table.sql");

我每天都会生成记录,以便稍后进行增量备份。

为什么system()输出文件而exec()没有?

2 个答案:

答案 0 :(得分:2)

如果您的目标是对数据库执行增量备份,mysqldump不是理想的选择。

您可以在这里做两件事:

  1. [BAD WAY]使用您的PHP代码以CSV和JSON格式序列化和转储新记录并使用它。

  2. 你可能想在MySQL中使用binlog来帮助你做到这一点(follow the link to read the MySQL backup methods

  3. 倾倒选择性记录:

    $recset = mysql_query("select column from database.table where= column > 1234");
    for($recset as $row){
        file_put_contents("filename.json", json_encode($row) . "\n")
    }
    

    现在,您可以逐行阅读此文件并使用json_enocode将数据恢复到php数组/对象中并按照您的意愿执行。

    [编辑:查看您的粘贴代码后]

    根据需要修改一些变量名称和代码后。

    $docsql='nts.sql';
    require("cnxn.php");
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    $q1=mysqli_query($cnx,"SELECT * FROM table WHERE col > '45678' ORDER BY col ASC");
    $data_records=array();
    while($r1=mysqli_fetch_assoc($q1)){
        $cntn=htmlentities($r1['cntn']);
        array_push($data_records, "(".$r1['col1'].",'".$r1['col2']."','".$r1['col3']."','".$r1['col4']."','".$r1['col5']."')");
    }
    
    $insert="INSERT INTO notas (col1, col2, col3, col4, col5) VALUES ";
    file_put_contents($docsql, $insert);
    foreach($data_records as $record){
        file_put_contents($docsql, $record) . "\n", FILE_APPEND);
    }
    

答案 1 :(得分:0)

对于akm建议的解决方案,我刚刚添加了最后一个用分号代替最后一个昏迷的方法:

$docsql='nts.sql';
require("cnxn.php");
error_reporting(E_ALL);
ini_set('display_errors', '1');
$q1=mysqli_query($cnx,"SELECT * FROM table WHERE col > '45678' ORDER BY col  ASC");
$data_records=array();
while($r1=mysqli_fetch_assoc($q1)){
$cntn=htmlentities($r1['cntn']);
array_push($data_records, "(".$r1['col1'].",'".$r1['col2']."','".$r1['col3']."','".$r1['col4']."','".$r1['c ol5']."')");
}

$insert="INSERT INTO notas (col1, col2, col3, col4, col5) VALUES ";
file_put_contents($docsql, $insert);
foreach($data_records as $record){
    file_put_contents($docsql, $record) . "\n", FILE_APPEND);
}

$chng = fopen("nts.sql", "a+") or die("cant open file");
$rmv = fstat($chng);
ftruncate($chng, $rmv['size']-2);
fwrite($chng,';');
fclose($chng);

这项工作做得很好。谢谢你的摇滚......