datafromdump : Получение частичных данных из файлов SQL дампа

Иногда приходится переносить отдельные таблицы между разными серверами БД, или восстанавливать данные в одной или нескольких таблицах, но единственный вариант резервной копии в наличии - полный файл дампа, созданный стандартными утилитами (типа 'mysqldump' в MySQL).
В production - системах файлы дампа могут иметь большие размеры, так что задача становится нетривиальной.

Класс CDataFromDump помогает упростить задачу: он сканирует исходный дамп и "выхватывает" операторы вставки данных только для указанных таблиц. Эти операторы (CREATE TABLE и INSERT INTO ...) могут быть либо сразу выполнены на подключенной базе, либо сохранены в отдельный файл.

Класс имеет следующие возможности:

Обратите внимание: исходный файл дампа должен быть текстовым файлом, в котором каждый SQL оператор должен заканчиваться символом точки-с-запятой (";"), и это должен быть последний "непробельный" символ в строке. Только в этом случае дамп обрабатывается корректно. Также поддерживаются много-строчные SQL операторы, но за исключением случаев, когда строки заканчиваются на ";" но при этом не являются концом оператора. Например, такая ситуация теоретически может возникнуть при наличие строковых констант, содержащих символ ";" и символы перевода каретки за ним.
В этом случае будут сгенерированы "обрезанные" операторы, которые не смогут быть исполнены !

Пример использования

Example
require_once('datafromdump.php');

$from = 'E:\Backup\intranet\mydatabase.sql';
$graber = new CDataFromDump();
$graber->ParseDump($from,'travel_companies,travel_employees,departments','partial-data.sql');
$graber->PrintStatistics();

CDataFromDump methods list

CDataFromDump($verbose=false, $usemeta=true) - конструктор класса.
$verbose - непустое значение включает вывод лога выполняемых действий. По умолчанию - без вывода.
$usemeta - включает или отключает режим создания и использования файла мета-данных. Мета-данные - это позиции (смещение) до начала блоков операторов создания таблиц и вставки данных, для всех таблиц в дампе. Файл мета-данных создается в одной папке с исходным файлом дампа, имеет такое же имя ПЛЮС расширение ".metadata", и в точночти такую же дату-время модификации. По умолчанию режим включен.

ParseDump($srcfilename, $tablelist='', $destfilename='',$createsql=true, $offset=0) - основной метод класса, который сканирует исходный файл дампа, формирует мете-файл (если еще не создан) либо считывает его для использования, и выполняет ЛИБО сохраняет в выходной файл все найденные операторы для указанных таблиц.
Параметры:

$srcfilename - имя исходного файла дампа.
$tablelist - Список таблиц, подлежащих копированию. Обратите внимание, что регистр написания имен таблиц важен (придерживайтесь того же регистра, в котором были созданы имена у таблиц в базе). Список таблиц может передаваться как в виде массива, так и одной строкой (имена разделены запятыми).
$destfilename - имя выходного файла дампа, в котором сохраняются SQL операторы. Если пуст, делается попытка выполнения операторов на текущей базе MySQL.
$createsql : по умолчанию вместе с операторами INSERT INTO находятся и DDL-операторы CREATE TABLE для указанных таблиц, которые также либо выполняются, либо пишутся в выходной дамп. Если создавать таблицы не нужно, передать нулевое значение, и CREATE TABLE будут выключены.
$offset - необязательный параметр начального смещения, откуда начинать читать файл дампа. Используется только когда файл мета-данных еще не создан или режим использования мета отключен. Внимание: если передано ненулевое смещение, когда мета-файл не создан, то в итоге сгенерируется "неполный" мета-файл !

PrintStatistics() - выводит небольшую таблицу статистики по выполненной работе. См.скриншот.

Distributed under BSD license

История

1.00.001 (13.09.2010)


Copyright © 2010 Alexander Selifonov, www.selifan.ru