Назад | Перейти на главную страницу

mysqldump имеет «быстрый» вариант. Почему это не включено по умолчанию?

В документации mysqldump я вижу параметр «--quick», однако нет никаких указаний на то, почему кто-то может захотеть отключить его. Каковы недостатки его включения или почему это вообще вариант? Разве он не должен быть всегда включен?

http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_quick


edit: Хотя мне было ясно, что он включен по умолчанию, это не слишком ясно из официальной документации (особенно когда в некоторых примерах указывается опция: http://dev.mysql.com/doc/refman/5.7/en/copying-databases.html). В таблице параметров нет поля, определяющего значения по умолчанию, а в описании --quick нет примечания о том, что он включен --opt. Я оставлю название вопроса без изменений, чтобы другие пользователи, которые ищут то же самое через Google, могли легко найти информацию.

Пока --quick включен по умолчанию, я могу вспомнить только один конкретный случай, когда мне пришлось отключить часть --quick параметры.

У моего клиента была база данных, которая должна была быть установлена ​​на меньшем сервере Linux почти без памяти (я думаю, это было 2 ГБ). Mysqldump, созданный с помощью --quick имеет расширенные INSERT. Этот mysqldump не может быть загружен в этот 2-гигабайтный Linux, потому что буфер массовой вставки не может быть выделен достаточно большим для размещения одного расширенного INSERT. Это сводило меня с ума. То есть, пока я не решил добавить --skip-extended-insert.

Что это заставило каждую команду INSERT вставить одну строку. Хотя это увеличило размер mysqldump и заставило загрузку mysqldump занять несколько часов, это помогло. Весь набор данных был загружен на запущенный Linux-сервер.

ПРЕДОСТЕРЕЖЕНИЕ : Пожалуйста, не спрашивайте меня, почему клиент хочет, чтобы MySQL работал на сервере Linux 2 ГБ. Это было более 5 лет назад, и я все еще ломаю голову, когда думаю об этом.

Что касается --disable-keys, вы могли бы использовать --skip-disable-keys чтобы позволить MyISAM-таблице перезагружаться и позволить INSERT заполнять все неуникальные индексы на лету. Это привело бы к получению несколько однобоких индексов, если бы данные были загружены уже отсортированными. Тем не менее, это будет необходимо при перезагрузке mysqldump в среде с низким объемом памяти (как я уже с грустью вспоминал).

--quick является по умолчанию включен, поскольку это одна из опций, включенных в --opt, который включен по умолчанию.

На странице руководства:

  • Использование --opt то же самое, что и указание --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, и --set-charset. Все варианты, которые --opt означает также включены по умолчанию, потому что --opt по умолчанию включен.

Страница, на которую вы ссылаетесь, содержит аналогичную информацию.

  • --opt

    Этот параметр, включенный по умолчанию, является сокращением для комбинации --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset. Он обеспечивает быструю операцию дампа и создает файл дампа, который можно быстро перезагрузить на сервер MySQL.