Архів за місяць: Квітень 2013

mysqldump – кожен запис окремим рядком

Утиліта mysqldump при збереженні даних таблиць об’єднує усі записи у одну команду INSERT. Виглядає це приблизно так:

INSERT INTO `таблиця` VALUES (запис1),(запис2), ..., (останній запис);

Коли таблиця має багато записів, то команда INSERT перетворюється у довжелезний рядок. Це зручно для машини, але людині читати такий файл складно.

Одне з рішень – замість однієї команди INSERT використовувати окремі команди для кожного запису:

mysqldump --extended-insert=FALSE --complete-insert=TRUE ...

Тоді файл матиме вигляд:

INSERT INTO `таблиця` (опис полів) VALUES (запис1);
INSERT INTO `таблиця` (опис полів) VALUES (запис2);
INSERT INTO `таблиця` (опис полів) VALUES (...);
INSERT INTO `таблиця` (опис полів) VALUES (останній запис);

Але є краще рішення. Для цього достатньо пропустити результат mysqldump –extended-insert крізь регулярний вираз у інтерпретаторі Perl:

mysqldump --extended-insert ... | perl  -pane "s{),(}{),n(}smg" > дамп_файл.sql

Після цього сприймати зміст дампу стає значно простіше:

INSERT INTO `таблиця` (опис полів) VALUES (запис1),
(запис2),
(запис3),
...,
(останній запис);

make: apxs: Command not found

Таке повідомлення з’являється при спробі компіляції старого модуля Apache. В інтернеті радять встановлювати пакет dev пакет апачу (в моєму випадку це apache2-prefork-dev). Але команди apxs в ньому не має.

Проте є /usr/bin/apxs2, тому ліземо у Makefile і міняємо:

APXS=apxs

на

APXS=apxs2

Встановлення модулів Perl в Debian

Коли мені потрібен якийсь модуль Perl, я спочатку перевіряю його наявність у пакунках – http://www.debian.org/distrib/packages#search_contents

Це дуже просто, достатньо знати якого файлу не вистачає. Наприклад, ми отримали таке повідомлення про помилку:

Can't locate LWP/UserAgent.pm in @INC ...

Воно означає, що потрібен модуль LWP::UserAgent, але насправді це файл UserAgent.pm у каталозі LWP. Тому шукаємо саме так, як вказано у повідомленні про помилку: LWP/UserAgent.pm (режим “paths ending with the keyword”).

Пошук повертає 3 пакунки:

/usr/share/perl/5.10.1/CPAN/LWP/UserAgent.pm perl-modules
/usr/share/perl5/LWP/UserAgent.pm libwww-perl
/usr/share/perl5/Test/Mock/LWP/UserAgent.pm libtest-mock-lwp-perl

Нам потрібен libwww-perl, бо пакунок, що у назві містить test призначений для тестування, а perl-modules – це щось зовсім загальне.

Та іноді буває, що модуль Perl не дуже поширений і тому не потрапляє до пакунку у дистрибутиві Лінукс. У таких випадках слід встановлювати його зі CPAN – http://www.cpan.org/

На CPAN можна знайти майже будь-який модуль, скачати його і встановити вручну, але це довго. Простіше запустити утиліту cpan і встановити через неї.

Наприклад, Perl сценарій видав таку помилку:

Can't locate Geography/Countries.pm in @INC ...
Compilation failed in require at ...

Запускаємо cpan і по назві файлу Geography/Countries.pm ми вже знаємо ім’я пакету – Geography::Countries.

# cpan
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9402)
Enter 'h' for help.

cpan[2]> install Geography::Countries 
Running install for module 'Geography::Countries'
CPAN: Data::Dumper loaded ok (v2.124)
...

І через декілька секунд модуль все успішно встановлений.