phpでmysqlのデータベースを、SQL書き出し(できれば圧縮してZIPファイルとして保存)したいと思います。


書き出すときに、スタートレコード数と、全体で何レコード書き出すかを指定して、書き出しができないでしょうか?

具体的にphpでどう書くのかを知りたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/04/23 20:48:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:Yota No.1

回答回数453ベストアンサー獲得回数28

ポイント60pt

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サーバが同じマシンにありという前提で書いてあります。

id:dingding

ありがとうございます!

まさかこんなに直接的な答えをいただけるとはとても助かります。ありがとうございました。

2007/04/23 20:48:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません