Навеяно статьёй "Ускорение резервирования базы данных" из журнала "Системный администратор" за декабрь 2012 год #12(121).
Основной смысл статьи был в том что бы не сохранять предварительные данные из mysqldump в файл который будет сжиматься, а сразу сжимать поток и записывать его на диск. Я сразу заинтересовался этой статьёй, т.к. у меня на сервере то же существует так скажем лишняя нагрузка которая меня нервирует.
У себя я использую bzip2 т.к. он лучше сжимает файл, но как результат у меня бекап снимается за 13m18.770s то есть всё выгляло изначально примерно так:
mysqldump --user=dumper --password=secret db_name --single-transaction --lock-tables --quick ${work_dir}/mysql/db_name.sql
bzip2 -9 ${work_dir}/mysql/db_name.sql
#13m18.770s
Я решил поменять это метод сжатия на gzip и избавиться от промежуточного файла
mysqldump --user=dumper --password=secret db_name --single-transaction --lock-tables --quick | gzip > ${work_dir}/mysql/$db_name.sql.gz
#1m46.244s
Заметное сокращение по времени! Но я решил попробовать использовать pigz - он использует при сжатие несколько потоков что сокращает время создания бекапа:
mysqldump --user=dumper --password=secret db_name --single-transaction --lock-tables --quick | pigz > ${work_dir}/mysql/$db_name.sql.gz
#1m21.159s
Разница не большая но есть. В итоге что я получаю: при смене алгоритма сжатия размер дампа увеличился на четверть (с 400МБ до 500 МБ), а скорость создания уменьшилась в 10 раз. Учитывая что размер дисков мне позволяет хранить ежедневные дампы за несколько лет, то я решил что увеличение размера дампа это не большая потеря по сравнению с выйгрышем во времени. А вот что касается использования pigz вместо gzip то тут я решил что это лишнее, т.к. увеличение скорости слишком маленькое, а в результате вместо одного занятого ядра у меня получается два занятых ядра. В итоге я оставил gzip.
Автор: Сергей Степанов
Поделиться @