Mysqldump остается одним из популярных решений для выполнения бекапов. Если на данном этапе развития проекта более продвинутые средства создания бекапов не используются, стоит использовать mysqldump с правильным параметрами.
Наиболее критичное влияние, которое mysqldump оказывает в продакшне, это блокировка таблиц:
root@webminer-manager-1:~# mysql -e "show processlist" +-------+------+-----------------+-----------+---------+------+---------------------------------+------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------------+-----------+---------+------+---------------------------------+------------------------------+ | 416 | user | localhost:52102 | db | Query | 632 | Waiting for table metadata lock | INSERT INTO products SET url = '... | | 417 | user | localhost:52104 | db | Query | 633 | Waiting for table metadata lock | INSERT INTO products SET url = '... | | 418 | user | localhost:52106 | db | Query | 633 | Waiting for table metadata lock | INSERT INTO products SET url = '... | ...
# блокировка таблицы во время выполнения дампа
При этом любые запросы на изменение данных будут ожидать выполнения полного дампа. А это значит, что ваше приложение практически перестанет работать для пользователей. Выключить блокировку таблиц можно с помощью следующих параметров:
-l, --lock-tables Lock all tables for read. (Defaults to on; use --skip-lock-tables to disable.) --single-transaction Creates a consistent snapshot by dumping all tables in a single transaction. Works ONLY for tables stored in storage engines which support multiversioning (currently only InnoDB does); the dump is NOT guaranteed to be consistent for other storage engines. While a --single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log position), no other connection should use the following statements: ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE, as consistent snapshot is not isolated from them. Option automatically turns off --lock-tables.
# выключение блокировки во время дампа
Вторая опция автоматически выключит первую для движков, которые поддерживают версионирование (например, InnoDB). Но если вы используете разные движки, стоит использовать обе опции.
Кроме этого, полезно включить опцию --insert-ignore
, чтобы избежать ошибок при последующем восстановлении (например, если изменились ключи).
И конечно, стоит использовать потоковое сжатие с помощью gzip
, чтобы сэкономить ресурсы дисковой подсистемы. Опция -v также полезна при дампе нескольких таблиц — выводит системную информацию о прогрессе дампа.
Финальная команда дампа для выполнения на продакшне может выглядеть так:
mysqldump -v --insert-ignore --skip-lock-tables --single-transaction=TRUE db products | gzip > /root/products.sql.gz
Такой дамп не будет блокировать таблицы и минимизирует влияние на основное приложение:
mysql> show processlist; +-------+------+-----------------+----+---------+------+-------------------+------------------------------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------------+----+---------+------+-------------------+------------------------------------------------------------------------------------------------------+ | 15655 | user | localhost:39430 | db | Query | 0 | query end | INSERT INTO products SET url = '... | 15656 | user | localhost:39450 | db | Sleep | 614 | | NULL | | 15661 | root | localhost | db | Query | 589 | Sending to client | SELECT /*!40001 SQL_NO_CACHE */ * FROM `products` | 15682 | user | localhost:39504 | db | Sleep | 0 | | NULL ...
# Отсутствие блокировки при дампе
Mysqldump можно использовать на продакшне, но при этом стоит отключать блокировку таблиц. Если же размер базы данных переваливает за несколько десятков Гб, запланируйте использование горячих бекапов.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…