дамп данных из MySQL

возникла задача реализовать на сайте возможность загрузки полного дампа данных из БД в файл клиента. MySQL средства аля SELECT … INTO OUTFILE не подходят по причине отсутствия (гипотетического) прав на сохранение… Решил писать свое лисапедо :) Вот что получилось:

define("ROOT", str_replace("\\", "/", realpath(dirname(__FILE__)."/../../")));
$result = mysql_list_tables(MYSQL_DBNAME);

$zip = new ZipArchive();
$filename = ROOT."/dumps/dump_".time().".zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
}

while ($row = mysql_fetch_row($result)) {
	$fcontent = "";

	$sql = "SELECT * FROM {$row[0]};”;
	$inner_result = mysql_query($sql);

	while ($inner_row = mysql_fetch_row($inner_result)) {
		for ($i = 0; $i < count($inner_row); $i++) {
			$inner_row[$i] = mysql_escape_string($inner_row[$i]);
			if (strstr($inner_row[$i], “,”)) {
				$inner_row[$i] = ‘”‘.$inner_row[$i].’”‘;
			}
			$fcontent .= $inner_row[$i].”, “;
		}
		$fcontent = substr($fcontent, 0, -2).”\n”;
	}

	$zip->addFromString(”{$row[0]}.txt”, $fcontent);
}
$zip->close();
header(”Location: /dumps/dump_”.time().”.zip”);

о производительности пока не заботился - чуть позже (после обеда) буду тестировать, да и сам код пока не вылизывал….

В приведенном участке кода могут присутствовать неопределенные переменные либо что-то типа такого, так как кусок взят из рабочего проекта просто методом “с… по …. строку копировать” :)

Tags: , , ,

Также рекомендую к прочтению:

One Response to “дамп данных из MySQL”

  1. Azazel Says:

    З.Ы. Если пользуетесь и/или правите - просьба выслать изменения на azazel.tap@gmail.com - будем приводить в нормальный вид вместе :)

Leave a Reply

Введите следующие символы: