Разумная блокировка таблиц в mysqldump во время создания дампа 2
Рецепт был опубликован 16 марта 2010 года в 17:20, а менялся 10 февраля 2020 года в 03:30.
Постоянная ссылка: http://www.nixp.ru/recipes/13.html
При создании дампа базы данных в СУБД MySQL с помощью утилиты mysqldump она по умолчанию делает таблицы недоступными на запись на все время создания дампа. Это приводит к негативным последствиям, например, в случае использования форума phpBB.
При каждом заходе на форум phpBB в MySQL обновляются некоторые данные (производятся не только операции чтения, но и операции записи). В итоге, при использовании mysqldump в режиме по умолчанию форум будет недоступен все время выполнения дампа.
Решение этой проблемы в случае использования движка хранения данных InnoDB весьма тривиально. У mysqldump есть опция
--single-transaction
, которая добавляет SQL-выражение BEGIN перед дампом всех данных из БД, что позволяет получить дамп одной транзакцией, без блокировки таблиц.
Для MyISAM можно воспользоваться опцией
--lock-tables
, которая блокирует таблицы с помощью READ LOCAL, что позволяет выполнять запросы INSERT в MyISAM-таблицы во время выполнения дампа.
P.S. Кроме того, при дампе больших таблиц с помощью mysqldump рекомендуется использовать опцию
--quick
.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Не стоит забывать, что если вы делаете дамп с флагами
и
, автоматические локи не работают (флаг
не действует)! Нужно указывать флаг
. Подробнее можно почитать в man mysqldump.