我想用 mysqldump 备份 table 的最后记录
I want to backup last records of a table with 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()
不会?
如果您的 objective 是对数据库进行增量备份 mysqldump
不是理想的选择。
您可以在这里做两件事:
[BAD WAY] 使用您的 PHP 代码以 CSV 和 JSON 格式序列化和转储新记录并使用它。
您可能想在 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 array/object 并按您的意愿进行操作。
[编辑:查看您的 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);
}
对于 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);
这很好。谢谢 akm 你摇滚...
到目前为止我有这个:
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()
不会?
如果您的 objective 是对数据库进行增量备份 mysqldump
不是理想的选择。
您可以在这里做两件事:
[BAD WAY] 使用您的 PHP 代码以 CSV 和 JSON 格式序列化和转储新记录并使用它。
您可能想在 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 array/object 并按您的意愿进行操作。
[编辑:查看您的 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);
}
对于 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);
这很好。谢谢 akm 你摇滚...