Архів мітки: regexp

Лапки у rewrite правилах Nginx

Якщо пишете правило rewrite для веб-сервера Nginx в якому використовуєте регулярні вирази (regexp) – завжди беріть його у лапки!

Тоді вам не побачити помилку при старті (рестарті) цього серверу:

nginx: [emerg] directive "rewrite" is not terminated by ";" in ...

Правило мало досить безневинний вигляд:

rewrite ^/([A-Za-z0-9]{6})$ /dyn/gallery.js?link=$1 last;

А треба було писати так:

rewrite "^/([A-Za-z0-9]{6})$" /dyn/gallery.js?link=$1 last;

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),
...,
(останній запис);