У меня проблема: для простоты использования я хотел бы иметь возможность отформатировать дамп MySQL командной строки так, чтобы каждая строка данной таблицы находилась в новой строке при использовании --extended-insert
вариант.
Обычно при использовании --extended-insert
, каждая строка данной таблицы выводится в одной строке, и, насколько мне известно, нет никакого способа изменить это, кроме пост-обработки дампа с помощью perl или тому подобного.
Я ищу следующий формат:
--
-- Dumping data for table `ww_tbCountry`
--
INSERT INTO `ww_tbCountry` (`iCountryId_PK`, `vCountryName`, `vShortName`, `iSortFlag`, `fTax`, `vCountryCode`, `vSageTaxCode`) VALUES (22, 'Albania', 'AL', 1, 0.00, '8', 'T9'),
(33, 'Austria', 'AT', 1, 15.00, '40', 'T9'),
(40, 'Belarus', 'BY', 1, 0.00, '112', 'T9'),
(41, 'Belgium', 'BE', 1, 15.00, '56', 'T9'),
(51, 'Bulgaria', 'BG', 1, 15.00, '100', 'T9'
Однако, когда я сбрасываю базу данных с помощью Phpmyadmin, используя --extended-insert
, каждая строка выгружается на новую строку (как показано в примере выше). Я прошел через Phpmyadmin и не могу найти никакой документации, которая бы это объяснила.
Кто-нибудь может пролить свет на это?
Судя по поиску в Google, кажется, что это невозможно через mysqldump
сам. Вы должны направить вывод во что-то еще, например sed
:
$ mysqldump --extended-insert ... database | sed 's$),($),\n($g'
Эта конкретная команда sed будет искать строку "), (" и помещать новую строку после запятой.
Недостаточно использовать регулярное выражение для разделения строк, вам нужен синтаксический анализатор, который правильно распознает кавычки и экранирующие символы.
Я только что написал парсер, так как не смог его найти: http://blog.lavoie.sl/2014/06/split-mysqldump-extended-inserts.html