書き出すときに、スタートレコード数と、全体で何レコード書き出すかを指定して、書き出しができないでしょうか?
具体的にphpでどう書くのかを知りたいです。
SELECT .....LIMIT.,. INTO OUTFILEでDBサーバのどこかにCSVファイルを吐き出しておいて、あとでLOAD DATA INFILEで戻すということでどうですか。
http://dev.mysql.com/doc/refman/4.1/ja/select.html
http://dev.mysql.com/doc/refman/4.1/ja/load-data.html
圧縮についてはgzopen,gzwrite,gzcloseなどを使うのでどうでしょう。
http://php.benscom.com/manual/ja/function.gzwrite.php
if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db('mysql_dbname', $link)) {
echo 'Could not select database';
exit;
}
$sql = 'SELECT * FROM hoge ORDER BY 1 LIMIT 5,10 INTO OUTFILE 'c:/temp/backup.csv';
$result = mysql_query($sql, $link);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
$filename = "c:/temp/bkup.csv" ;
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$gz = gzopen('c:/temp/bkup.gz','w9');
gzwrite($gz, $contents);
gzclose($gz);
?>
ただし、上記スクリプトはDBサーバとWEBサーバが同じマシンにありという前提で書いてあります。
ありがとうございます!
まさかこんなに直接的な答えをいただけるとはとても助かります。ありがとうございました。