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

标签 php mysql

到目前为止我有这个:

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() 不会?

最佳答案

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

你可以在这里做两件事:

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

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

转储选择性记录:

$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 数组/对象中,然后按您的意愿进行操作。

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

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

$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);
}

关于php - 我想用 mysqldump 备份表的最后记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32687601/

相关文章:

php - Preg_match 用于计算大写和抑扬符字符

php - 如何调试 Codeigniter 4

javascript - pikaday 日期未从 php 表单发送

php - mysql查询的意外输出

c# - 将字符串与表中的列值进行比较

mysql - MySQL中如何满足条件时选择一行,不满足条件时选择另一行?

php - 与 CodeIgniter Controller 、模型和模型工厂相关的两个错误

php - 如何从前一个div中获取隐藏的输入值

mysql - 无法添加或更新子行 : a foreign key constraint fails phpmyadmin

mysql - 计算 ID 并在查询中选择它