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 в среде с нехваткой памяти (как я уже с грустью вспомнил).