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

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

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


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

2 ответа

Решение

--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.

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

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

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

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

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

Другие вопросы по тегам