среда, 21 ноября 2012 г.

Создание дампа базы MySQL в котором используется отдельный INSERT на каждую строку данных

Вчера в процессе прикручивания автоматического создания зон в связке PowerDNS + PowerAdmin мне понадобилось узнать какие данные добавляет PowerAdmin при создании новой зоны. Сперва полез в код, но быстро бросил эту затею.

Следующей мыслью было сравнить дамп базы powerdns до и после создания зоны в poweradmin. Если вы когда-то просматривали дампы, которые по-умолчанию создает mysqldump, то наверняка видели, что там значения в таблицу вставляются через один вызов INSERT. Что-то вроде INSERT INTO `tablename` VALUES (a1, a2, a3, ..., aN), (b1, b2, b3, ..., bN), ...

В итоге таблица где много записей будет выглядеть не информативно при сравнении дампа до и после создания зоны в poweradmin. Чтобы решить эту проблему нужно либо применить "умный" diff, либо заставить mysqldump формировать вставку каждой строки данных через отдельный INSERT.

После пары экспериментов в опциями из man mysqldump нашлась искомая:

$ mysqldump --skip-extended-insert dbname > dbname.sql

При использовании этой опции дамп выглядит так:

INSERT INTO `tablename` VALUES (a1, a2, a3, ..., aN);
INSERT INTO `tablename` VALUES (b1, b2, b3, ..., bN);
...

После этого в выводе diff отлично видно какие данные были добавлены в БД после создания зоны.

Комментариев нет:

Отправить комментарий